.data
str BYTE "this is a string", 0 ;8bit
var1 WORD ? ;16bit
var2 DWORD 10 DUP(0) ;32bit
var3 SDWORD 1, 2, 3, 4, 5 ;64bit
str BYTE "this is a string", 0 ;8bit
mov edx, OFFSET str
call WriteString
call Crlf ;換行
call ReadDec ;讀取使用者輸入數字存進eax(會顯示)
call ReadChar ;讀取使用者的輸入字元存進eax(不會顯示)
call WriteChar ;輸出使用者的輸入
call ReadDec
call ReadChar ;讀取函式將內容存進eax
call WriteDec
call WriteChar ;打印函式打印eax內容
loop forloop ;使用ecx計數
movzx eax, al ;8bit擴展到32bit ;eax 32bit, ax 16bit, ah/al 8bit
mov bx, ax ;32bit(eax)縮減到16bit 要使用ax 如果要移動高位元的部分要先右移
cmp register, register/var
jmp jump ;無條件跳轉
je jump_if_equal
jne jump_if_not_equal
jl jump_if_less ;left < right
jle jump_if_less_or_equal ;left <= right
jg jump_if_greater ;left > right
jge jump_if_greater_or_equal ;left >= right
array WORD 10 DUP(?)
mov esi, OFFSET array ;取得array起始的位址
mov ecx, LENGTHOF array ;取得array元素長度
;mov ecx, SIZEOF array ;取得array位址長度(10*2=20) ;BYTE:1, WORD:2.....
InputLoop:
call ReadInt ;讀取使用者輸入
mov word ptr [esi], ax ;將輸入的值存入array 因為是32 > 16所以用ax
add esi, 2 ;移動到下一個index <根據array的data type加不同偏移量>
loop InputLoop
mov ecx, LENGTHOF array
OutputLoop:
movzx eax, word ptr [esi] ;將array index值存入eax 因為是16 > 32所以用movzx
call WriteDec ;印出eax
call Crlf ;換行
add esi, 2 ;移動到下一個idnex
loop OutputLoop
ADC/SBB : 考慮進/借位的計算


; EDX EAX / Div = EAX + EDX
; 0 40 / 4 = 10 + 0
mov eax, 40
mov bl, 4
div bl ;eax = 10