在8086模拟器中运行汇编求平均值程序
?
score的平均整數,并存入內存字變量Average中,數組以-1為結束標志。
?
?xor eax,eax
?是異或運算,兩數相反為1;兩數相同為0。由于這兩個數相同,異或后等于清0 ;由于它比mov eax,0效率高,所以一般用它。
?
LEA 取有效地址指令 (Load Effective Address )
取源操作數地址的偏移量,并把它傳送到目的操作數所在的單元。
下面兩條指令就是等價的,他們都取TABLE的偏移地址,然后送到BX中,即
LEA BX,TABLE
MOV BX,OFFSET TABLE
?
帶進位加法指令 ADC(Addition Carry)
格式
ADC OPRD1,OPRD2
功能
OPRD1<--OPRD1 + OPRD2 + CF
說明
1. OPRD1為任一通用寄存器或存儲器操作數,可以是任意一個通用寄存器,而且還可以是任意一個存儲器操作數.
OPRD2為立即數,也可以是任意一個通用寄存器操作數.立即數只能用于源操作數.
2. OPRD1和OPRD2均為寄存器是允許的,一個為寄存器而另一個為存儲器也是允許的,但不允許兩個都是存儲器操作數.
3. 加法指令運算的結果對CF、SF、OF、PF、ZF、AF都會有影響.以上標志也稱為結果標志.
4. 該指令對標志位的影響同ADD指令.
?
div是除法指令,使用div做除法的時候應注意以下問題:
1、除數:有8位和16位兩種,在一個寄存器或者內存中。
2、被除數:默認放在AX或(DX和AX)中,如果除數為8位,被除數為16位,被除數默認在AX中存放,如果除數為16位,被除數為32位,被 ?除數則在(DX和AX)中存放,DX存放高16位,AX存放低16位。
3、結果:如果除數是8位,則AL存儲除法操作的商,AH存儲除法操作的余數;如果除數是16位,則AX存儲除法操作的商,DX存儲除法操作的余數。
格式如下:
div reg
div 內存單元
以100001/100為例,100001大于65535,所以只能用dx和ax兩個寄存器聯合存放100001,也就是說要進行16位的除法。除數100小于255,可以在一個8位的寄存器中存放,但是被除數是32位的,除數應為16位,所以要使用一個16位的寄存器來存放除數100.
dx和ax分別存放100001的高16位和低16位值,所以將100001表示為16進制的形式:186a1h.
?
data1段的地址被編譯為00710h,10個數據被放入此;但是為什么在模擬器中此地址出現在棧的模擬中;
?
0710被放入DS寄存器;SI目前是0;
第一個數被放入BX中;over標號編譯后的地址為020h;
?
第一個數加完,AX為5A(10進制的90);
看BX是否為0;
加完一個數,CX為1;
SI指向下一個數;again編譯后的地址為0Eh;
累加;結果在AX中;
加完,看CX為10,AX為0279h=10進制的633;
看前面圖,在整個過程中進位標志CF一直未變;
看變量窗口,除完后的結果為003Fh,此結果不包括余數;
?
?
總結
以上是生活随笔為你收集整理的在8086模拟器中运行汇编求平均值程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CASE软件Enterprise Arc
- 下一篇: 图解Win7下PowerShell初步使