組合語言 Assembly Language

 組合語言 Assembly Language


1.
ds=2300hbx=0200h,那麼執行 mov ax,[bx] 指令後就會把 2300:0200 記憶體的資料取出2byes並存入 ax

2.

SP是堆疊指標,當使用 push 指令時,sp會加2,而執行popsp會減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.

置放堆疊的記憶體區塊的位址,就是 SS:SP暫存器所指的位址

(1).PUSH:將 sp 的值減 2,然後在將指定要放入堆疊的運算元存入 ss:[sp]
(2).POP:將 ss:[sp] 的值取出,並放入所指定的運算元內,然後 sp 的值加 2


jmpi

jmpi  go,INITSEG


jmpi为段间跳转指令
執行這條指令之後


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=0000h
1.
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







留言

這個網誌中的熱門文章

C++ DirectX Draw Triangle