2013-03-10 12:19:32Morris

[組合語言][練習] 九九乘法表

練習使用 for 迴圈,同時使用兩層 for 迴圈的操作。

會發現 jump 的指令不能跳躍太多行,網路上查是 -128-127,應該是 byte 為單位的指令長度。

使用 push 暫存第一個迴圈的值,第二個迴圈結束後,在 pop 回來,並且 jump 回去。




TITLE table

INCLUDE Irvine32.inc

.data
x db ?
y db ?
z db ?
str1 db "*", 0
str2 db "=", 0
newline db 0dh, 0ah, 0
.code
main PROC
    mov ecx, 9 ; i = 9
    mov x, 1   ; x = 1
fori:
    mov y, 1   ; y = 1
    push ecx   ; store i
    mov ecx, 9 ; j = 9
forj:
    mov al, x
    mul y      ; AL = AL*y
    mov z, al  ; z = al
    
    mov al, ' '
    call WriteChar
    mov eax, 0
    movzx ax, y  ;
    call WriteDec
    mov edx, OFFSET str1 ; print " * "
    call WriteString
    movzx ax, x  ;
    call WriteDec
    mov edx, OFFSET str2 ; print " = "
    call WriteString
    movzx ax, z  ;
    call WriteDec
    inc y      ; y++
    loop forj
    mov edx, OFFSET newline ; print "\n"
    call WriteString
    pop ecx
    inc x
    loop fori
    ret
main ENDP

END main