組合語言 Assembly Language
組合語言 Assembly Language
1.
ds=2300h,bx=0200h,那麼執行 mov ax,[bx] 指令後就會把 2300:0200 記憶體的資料取出2byes並存入 ax
2.
SP是堆疊指標,當使用 push 指令時,sp會加2,而執行pop時sp會減2
3.
data.
pas0 db 'ABCD'
pas2 db 'EFGH' ; 假設資料段,是如此定義了兩個變數
; pas0 位址的內含值是 'A',pas0+1的內含值是'B'
; pas0+2 位址的內含值是 'C',pas0+3的內含值是'D'
; pas0+4 位址的內含值是 'E' 也是等於 pas2 的內含值是'E'
; 這個地方非常的奧秒吧,為什麼 [pas0+4]=[pas2]的值
; 因為'D'的下一位址就是'E'
4.
3.
data.
pas0 db 'ABCD'
pas2 db 'EFGH' ; 假設資料段,是如此定義了兩個變數
; pas0 位址的內含值是 'A',pas0+1的內含值是'B'
; pas0+2 位址的內含值是 'C',pas0+3的內含值是'D'
; pas0+4 位址的內含值是 'E' 也是等於 pas2 的內含值是'E'
; 這個地方非常的奧秒吧,為什麼 [pas0+4]=[pas2]的值
; 因為'D'的下一位址就是'E'
4.
置放堆疊的記憶體區塊的位址,就是 SS:SP暫存器所指的位址
(1).PUSH:將 sp 的值減 2,然後在將指定要放入堆疊的運算元存入 ss:[sp]
(2).POP:將 ss:[sp] 的值取出,並放入所指定的運算元內,然後 sp 的值加 2
jmpi
jmpi go,INITSEGjmpi为段间跳转指令
執行這條指令之後
CS = INITSEG
IP = go
db 前要加jmp
org 100h
jmp main
msg db 'hello','$'
main:
;your code
ret
輸入字元
ah=01h
return al
ex:
mov ah,01h
int 21h
;al = [intput char]
輸出字元
al => result status
ex:
mov ah,01h
mov dl,'0'
int 21h
輸出字串
1.
mov dx, offset msg
mov ah,09h
int 21h
2.
lea dx, msg
mov ah,09h
int 21h
AAA 用法
假設執行前 ax=0000h1.
mov al,6
add al,5
aaa
;ax = 0101h
2.
mov al,'0'
add al,'6'
aaa
;ax = 0006h
AAS 用法
if((AL & 0xF) > 9 || AF == 1) { AL = AL + 6; AH = AH + 1; AF = 1; CF = 1 } else { AF = 0; CF = 0; } AL = AL & 0xF;
ex:
mov al,6
sub al,9
aas
;ax = FF03h
DAA 用法
if(AL & 0xF > 9 || AF == 1) { CF = OldCF | GetCarry(AL = AL + 6); AF = 1; } else AF = 0; if(OldAL > 0x99 || OldCF == 1) { AL = AL + 0x60; CF = 1; } else CF = 0;
原理:
old_al > 99h => al+=60h
6+8 = 0E
0E+6 = 14h
留言
張貼留言