sub1.asm

来自「关于linux环境下的nasm代码的生成和使用」· 汇编 代码 · 共 89 行

ASM
89
字号
;; file: sub1.asm; Subprogram example program;; To create executable:; Using djgpp:; nasm -f coff sub1.asm; gcc -o sub1 sub1.o driver.c asm_io.o;%include "asm_io.inc"segment .dataprompt1 db    "Enter a number: ", 0       ; don't forget nul terminatorprompt2 db    "Enter another number: ", 0outmsg1 db    "You entered ", 0outmsg2 db    " and ", 0outmsg3 db    ", the sum of these is ", 0segment .bss;; These labels refer to double words used to store the inputs;input1  resd 1input2  resd 1 segment .text        global  asm_mainasm_main:        enter   0,0               ; setup routine        pusha        mov     eax, prompt1      ; print out prompt        call    print_string        mov     ebx, input1       ; store address of input1 into ebx        mov     ecx, ret1         ; store return address into ecx        jmp     short get_int     ; read integerret1:        mov     eax, prompt2      ; print out prompt        call    print_string        mov     ebx, input2        mov     ecx, $ + 7        ; ecx = this address + 7        jmp     short get_int        mov     eax, [input1]     ; eax = dword at input1        add     eax, [input2]     ; eax += dword at input2        mov     ebx, eax          ; ebx = eax;; next print out result message as series of steps;        mov     eax, outmsg1        call    print_string      ; print out first message        mov     eax, [input1]             call    print_int         ; print out input1        mov     eax, outmsg2        call    print_string      ; print out second message        mov     eax, [input2]        call    print_int         ; print out input2        mov     eax, outmsg3        call    print_string      ; print out third message        mov     eax, ebx        call    print_int         ; print out sum (ebx)        call    print_nl          ; print new-line        popa        mov     eax, 0            ; return back to C        leave                             ret;; subprogram get_int; Parameters:;   ebx - address of dword to store integer into;   ecx - address of instruction to return to; Notes:;   value of eax is destroyedget_int:        call    read_int        mov     [ebx], eax         ; store input into memory        jmp     ecx                ; jump back to caller

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?