組合語言aaa指令解析,aas指令解析

2021-10-02 10:45:54 字數 1417 閱讀 4193

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 ...