⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sub3.asm

📁 关于linux环境下的nasm代码的生成和使用
💻 ASM
字号:
;; file: sub3.asm; Subprogram example program;; To create executable:; Using djgpp:; nasm -f coff sub3.asm; gcc -o sub1 sub3.o driver.c asm_io.o;; Using Borland C/C++; nasm -f obj sub3.asm; bcc32 sub3.obj driver.c asm_io.obj%include "asm_io.inc"segment .datasum     dd   0segment .bssinput   resd 1 ;; psuedo-code algorithm; i = 1;; sum = 0;; while( get_int(i, &input), input != 0 ) {;   sum += input;;   i++;; }; print_sum(num);segment .text        global  asm_mainasm_main:        enter   0,0               ; setup routine        pusha        mov     edx, 1            ; edx is 'i' in pseudo-codewhile_loop:        push    edx               ; save i on stack        push    dword input       ; push address on input on stack        call    get_int        add     esp, 8            ; remove i and &input from stack        mov     eax, [input]        cmp     eax, 0        je      end_while        add     [sum], eax        ; sum += input        inc     edx        jmp     short while_loopend_while:        push    dword [sum]       ; push value of sum onto stack        call    print_sum        pop     ecx               ; remove [sum] from stack        popa        leave                             ret;; subprogram get_int; Parameters (in order pushed on stack);   number of input (at [ebp + 12]);   address of word to store input into (at [ebp + 8]); Notes:;   values of eax and ebx are destroyedsegment .dataprompt  db      ") Enter an integer number (0 to quit): ", 0segment .textget_int:        push    ebp        mov     ebp, esp        mov     eax, [ebp + 12]        call    print_int        mov     eax, prompt        call    print_string                call    read_int        mov     ebx, [ebp + 8]        mov     [ebx], eax         ; store input into memory        pop     ebp        ret                        ; jump back to caller; subprogram print_sum; prints out the sum; Parameter:;   sum to print out (at [ebp+8]); Note: destroys value of eax;segment .dataresult  db      "The sum is ", 0segment .textprint_sum:        push    ebp        mov     ebp, esp        mov     eax, result        call    print_string        mov     eax, [ebp+8]        call    print_int        call    print_nl        pop     ebp        ret

⌨️ 快捷键说明

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