作者 主題: [問題]使用AS組譯的煩惱  (閱讀 4445 次)

0 會員 與 1 訪客 正在閱讀本文。

jalala

  • 可愛的小學生
  • *
  • 文章數: 22
    • 檢視個人資料
[問題]使用AS組譯的煩惱
« 於: 2003-04-26 00:29 »
我現在在寫教人在Unix上組譯的網頁,這是我用AT&T ASM寫法寫的打出A的程式:
.global _start
_start:
    movl  $0x41,%edx   #把A寫進EDX暫存器內
    movl  $4,%eax      #使用INT80H的4號功能顯示字串
    int   $0x80        #呼叫INT80H

    pushl $0           #程式結束傳回錯誤值
    movl  $1,%eax      #使用INT80H的1號功能回到作業系統
    int   $0x80        #呼叫INT80H

組譯沒有問題
jalala$as -o test.o test.s
jalala$ld -o test test.o
不過…

jalala$ ./test
jalala$
想請教各位高手,要如何修正才會打出來a,希望教學網頁寫好之後,我會放在
LIY學園,謝謝。

  • 實習板主
  • 活潑的大學生
  • ***
  • 文章數: 270
    • 檢視個人資料
[問題]使用AS組譯的煩惱
« 回覆 #1 於: 2003-04-26 00:36 »
我並不懂AS組合語言

但是我的經驗是
因為送出的字元A後沒有換行
所以執行結束後被提示字串jalala$覆寫了!就像沒有執行似的!

jalala

  • 可愛的小學生
  • *
  • 文章數: 22
    • 檢視個人資料
[問題]使用AS組譯的煩惱
« 回覆 #2 於: 2003-04-26 17:55 »
請您再提供一些有關換行中斷的做法,請指教,謝謝任俠大大。

  • 實習板主
  • 活潑的大學生
  • ***
  • 文章數: 270
    • 檢視個人資料
[問題]使用AS組譯的煩惱
« 回覆 #3 於: 2003-04-27 23:41 »
用您的例子說明
.global _start
_start:
movl $0x41,%edx #把A寫進EDX暫存器內
movl $4,%eax #使用INT80H的4號功能顯示字串
int $0x80 #呼叫INT80H
movl $0x0a,%edx #把/n(或許是$0x0d才對)寫進EDX暫存器內
movl $4,%eax #使用INT80H的4號功能顯示字串
int $0x80 #呼叫INT80H
 

pushl $0 #程式結束傳回錯誤值
movl $1,%eax #使用INT80H的1號功能回到作業系統
int $0x80 #呼叫INT80H

如果您的程式是沒有錯的,這樣可以得到您想要的顯示

jalala

  • 可愛的小學生
  • *
  • 文章數: 22
    • 檢視個人資料
[問題]使用AS組譯的煩惱
« 回覆 #4 於: 2003-04-28 22:26 »
引述: "任俠"
用您的例子說明
.global _start
_start:
movl $0x41,%edx #把A寫進EDX暫存器內
movl $4,%eax #使用INT80H的4號功能顯示字串
int $0x80 #呼叫INT80H
movl $0x0a,%edx #把/n(或許是$0x0d才對)寫進EDX暫存器內
movl $4,%eax #使用INT80H的4號功能顯示字串
int $0x80 #呼叫INT80H
 

pushl $0 #程式結束傳回錯誤值
movl $1,%eax #使用INT80H的1號功能回到作業系統
int $0x80 #呼叫INT80H

如果您的程式是沒有錯的,這樣可以得到您想要的顯示

謝謝你幫我修改,感激不盡,但還是無法執行。
另外我在www.int80h.org網站看到,好像是要把參數放在堆疊內,不知道參數如何放在堆疊內,為此,請再不吝指教,謝謝。

zha0

  • 可愛的小學生
  • *
  • 文章數: 16
    • 檢視個人資料
[問題]使用AS組譯的煩惱
« 回覆 #5 於: 2004-06-29 07:32 »

elleryq

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 908
  • 性別: 男
    • 檢視個人資料
    • Thinking more...
[問題]使用AS組譯的煩惱
« 回覆 #6 於: 2004-06-30 13:58 »
我記得 linux assembly 的 mov 順序跟 windows 那邊的順序剛好顛倒~~
僅供參考~~
Plan your work, then work your plan.
我的首頁:http://blog.elleryq.idv.tw
351899by http://counter.li.org

zha0

  • 可愛的小學生
  • *
  • 文章數: 16
    • 檢視個人資料
[問題]使用AS組譯的煩惱
« 回覆 #7 於: 2004-07-01 18:49 »
Unix/Linux 組語下是採用 AT&T 的語法, 而 Windows/DOS 使用 Intel 的語法,
如果要在 Unix/Linux 下用 Intel 的語法, 可以用 nasm 這套組譯程式.

http://sourceforge.net/projects/nasm

jan

  • 懷疑的國中生
  • **
  • 文章數: 73
    • 檢視個人資料
[問題]使用AS組譯的煩惱
« 回覆 #8 於: 2004-07-01 18:57 »
;Copyright (c) 1999 Konstantin Boldyshev <konst@linuxassembly.org>
;
;"hello, world" in assembly language for Linux
;
;to compile:
;
;nasm -f elf hello.asm #用nasm組譯
;ld -s -o hello hello.o

section .text
    global _start                       ;must be declared for linker (ld)

msg     db      'Hello, world!',0xa     ;our dear string
len     equ     $ - msg                 ;length of our dear string

_start:                                 ;tell linker entry point

        mov     edx,len ;message length
        mov     ecx,msg ;message to write
        mov     ebx,1   ;file descriptor (stdout)
        mov     eax,4   ;system call number (sys_write)
        int     0x80    ;call kernel

        mov     eax,1   ;system call number (sys_exit)
        int     0x80    ;call kernel
#資料來源:
http://www.linuxassembly.org/