aaa指令本質上是將相加後的結果拆成兩個部分(拆成非壓縮bcd碼的形式)
下面進行舉例介紹
1.ah = 0,al = 06h,bl = 09h,執行指令add al,bl得ah = 01h,al = 05h,aaa的作用就是將相加後al中的結果15拆分成兩部分
(將0fh十進位制為15的數字拆分成乙個1和乙個5,1放在ax的高位ah中,5放在ax的低位al中)
2.看下面的彙編**段
mov ah,0 ;ax = 0038h
mov al,'8'
;'8'的ascii碼值十進位制為56,十六進製制為0038h,所以ax = 0038h
add al,'2'
;'2'的ascii碼值十進位制為50,十六進製制為0032h,所以ax = 0032h,相加後結果為006ah
aaa ;執行aaa指令後ax = 0100h,本質上是將al低位的a進行化簡,a的值為10,轉化為bcd碼值為01 00h
or ax,3030h ;相當於or ah,30h與or al,30h操作
將高位的ah與低位的al分別進行ascii碼值的轉換
最終輸出的值為"10",相當於將』8』與』2』進行加法運算,『8』+『2』 = 「10」
具體演算法
(1)如果al的低4位是在0到9之間,保留低4位,清除高4位,如果al的低4位在10到15之間,則通過加6,來使得低4位在0到9之間,然後再對高4位清零。
(2)如果al的低4位是在0到9之間,ah值不變,cf和af標誌清零,否則,ah=ah+1,並設定cf和af標誌。
aas指令與aaa指令類似
aas 減法的ascii調整指令(ascii adjust for subtraction)
若al暫存器的低4位》9或af=1,則:
(1)al=al-6,af置1;
(2)將al暫存器高4位清零;
(3)ah=ah-1,cf置1。
否則,不需要調整。
如下面的彙編指令
.data
val1 byte 『8』
val2 byte 『9』
.code
mov ah, 0
mov al,val1 ; ax = 0038h
sub al,val2 ; ax = 00ffh
aas ; ax = ff09h
pushf ; 儲存進製標誌位
or al,30h ; ax = ff39h
popf ; 恢復進製標誌位
算出ax = 00ffh之後,看末尾的f,
f超過值9,將f-6後值為09放入末尾的al之中
因為f減去了值6,所以打頭的00需要減1
00-1=ffh,最終結果為ax = ff09h
組合語言 彙編指令
功能 用來進行資料傳輸。以 mov a,b 為例,相當於a b。具有以下形式 mov 暫存器,資料 mov 暫存器,暫存器 mov 暫存器,記憶體單元 mov 記憶體單元,暫存器 mov 段暫存器,暫存器 功能 用來做加法。以 add a,b 為例,相當於a a b。具有的形式,和 mov 一樣。功...
組合語言 傳送指令
一.傳送指令 1.通用傳送指令mov mov dst,src 將src傳送到dst中 dstsrc操作位數 mem reg imm8 16 mem reg seg reg8 16 reg seg mem 8 16 mem reg seg 8 16 imm是立即數,reg是暫存器,seg是段暫存器,m...
組合語言常用指令
上次說到組合語言十分重要,所以又為了避免忘記,貼上一些常用彙編指令 mov 指令範例 mov r1,8 mov r2,r1 mov r3,10 mvn 傳送取反賦值 mvn r1,0b10 mvn r2,5 mvn r3,r1 sub 減法 目的暫存器 被減數 不能是立即數 減數 mov r2,4 ...