math.asm

来自「PC Assembly Tutorial running the code i」· 汇编 代码 · 共 98 行

ASM
98
字号
;; file: math.asm; This program demonstrates how the integer multiplication and division; instructions work.;; To create executable:; nasm -f coff math.asm; gcc -o math math.o driver.c asm_io.o%include "asm_io.inc"segment .data;; Output strings;prompt          db    "Enter a number: ", 0square_msg      db    "Square of input is ", 0cube_msg        db    "Cube of input is ", 0cube25_msg      db    "Cube of input times 25 is ", 0quot_msg        db    "Quotient of cube/100 is ", 0rem_msg         db    "Remainder of cube/100 is ", 0neg_msg         db    "The negation of the remainder is ", 0segment .bssinput   resd 1segment .text        global  _asm_main_asm_main:        enter   0,0               ; setup routine        pusha        mov     eax, prompt        call    print_string        call    read_int        mov     [input], eax        imul    eax               ; edx:eax = eax * eax        mov     ebx, eax          ; save answer in ebx        mov     eax, square_msg        call    print_string        mov     eax, ebx        call    print_int        call    print_nl        mov     ebx, eax        imul    ebx, [input]      ; ebx *= [input]        mov     eax, cube_msg        call    print_string        mov     eax, ebx        call    print_int        call    print_nl        imul    ecx, ebx, 25      ; ecx = ebx*25        mov     eax, cube25_msg        call    print_string        mov     eax, ecx        call    print_int        call    print_nl        mov     eax, ebx        cdq                       ; initialize edx by sign extension        mov     ecx, 100          ; can't divide by immediate value        idiv    ecx               ; edx:eax / ecx        mov     ecx, eax          ; save quotient into ecx        mov     eax, quot_msg        call    print_string        mov     eax, ecx        call    print_int        call    print_nl        mov     eax, rem_msg        call    print_string        mov     eax, edx        call    print_int        call    print_nl                neg     edx               ; negate the remainder        mov     eax, neg_msg        call    print_string        mov     eax, edx        call    print_int        call    print_nl        popa        mov     eax, 0            ; return back to C        leave                             ret

⌨️ 快捷键说明

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