日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

在8086模拟器中运行汇编求平均值程序

發(fā)布時(shí)間:2025/4/14 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在8086模拟器中运行汇编求平均值程序 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
DATA1 SEGMENT data DW 90, 95, 54, 65, 36, 78, 66, 0, 99, 50, -1 Average DW 0 DATA1 ENDS CODE1 SEGMENT ASSUME CS:CODE1, DS:DATA1 START: MOV AX, DATA1 MOV DS, AX XOR AX, AX XOR DX, DX ;用(DX,AX)來保存數(shù)組元素之和 XOR CX, CX ;用CX來保存數(shù)組元素個(gè)數(shù) LEA SI, data ;用指針SI來訪問整個(gè)數(shù)組 again: MOV BX, word ptr [SI] CMP BX, 0 JL over ADD AX, BX ADC DX, 0 ;把當(dāng)前數(shù)組元素之值加到(DX,AX)中 INC CX ;數(shù)組元素個(gè)數(shù)加1 ADD SI, 2 JMP again over: JCXZ exit ;防止零作除數(shù),即數(shù)組是空數(shù)組 DIV CX MOV Average, AX exit: MOV AX, 4C00H INT 21H CODE1 ENDS END START

?

score的平均整數(shù),并存入內(nèi)存字變量Average中,數(shù)組以-1為結(jié)束標(biāo)志。

?

?xor eax,eax

?是異或運(yùn)算,兩數(shù)相反為1;兩數(shù)相同為0。由于這兩個(gè)數(shù)相同,異或后等于清0 ;由于它比mov eax,0效率高,所以一般用它。

?

LEA 取有效地址指令 (Load Effective Address )
取源操作數(shù)地址的偏移量,并把它傳送到目的操作數(shù)所在的單元。

下面兩條指令就是等價(jià)的,他們都取TABLE的偏移地址,然后送到BX中,即

LEA BX,TABLE
MOV BX,OFFSET TABLE

?

帶進(jìn)位加法指令 ADC(Addition Carry)
格式
ADC OPRD1,OPRD2
功能
OPRD1<--OPRD1 + OPRD2 + CF
說明
1. OPRD1為任一通用寄存器或存儲(chǔ)器操作數(shù),可以是任意一個(gè)通用寄存器,而且還可以是任意一個(gè)存儲(chǔ)器操作數(shù).
OPRD2為立即數(shù),也可以是任意一個(gè)通用寄存器操作數(shù).立即數(shù)只能用于源操作數(shù).
2. OPRD1和OPRD2均為寄存器是允許的,一個(gè)為寄存器而另一個(gè)為存儲(chǔ)器也是允許的,但不允許兩個(gè)都是存儲(chǔ)器操作數(shù).
3. 加法指令運(yùn)算的結(jié)果對(duì)CF、SF、OF、PF、ZF、AF都會(huì)有影響.以上標(biāo)志也稱為結(jié)果標(biāo)志.
4. 該指令對(duì)標(biāo)志位的影響同ADD指令.

?

div是除法指令,使用div做除法的時(shí)候應(yīng)注意以下問題:
1、除數(shù):有8位和16位兩種,在一個(gè)寄存器或者內(nèi)存中。
2、被除數(shù):默認(rèn)放在AX或(DX和AX)中,如果除數(shù)為8位,被除數(shù)為16位,被除數(shù)默認(rèn)在AX中存放,如果除數(shù)為16位,被除數(shù)為32位,被 ?除數(shù)則在(DX和AX)中存放,DX存放高16位,AX存放低16位。
3、結(jié)果:如果除數(shù)是8位,則AL存儲(chǔ)除法操作的商,AH存儲(chǔ)除法操作的余數(shù);如果除數(shù)是16位,則AX存儲(chǔ)除法操作的商,DX存儲(chǔ)除法操作的余數(shù)。
格式如下:
div reg
div 內(nèi)存單元
以100001/100為例,100001大于65535,所以只能用dx和ax兩個(gè)寄存器聯(lián)合存放100001,也就是說要進(jìn)行16位的除法。除數(shù)100小于255,可以在一個(gè)8位的寄存器中存放,但是被除數(shù)是32位的,除數(shù)應(yīng)為16位,所以要使用一個(gè)16位的寄存器來存放除數(shù)100.
dx和ax分別存放100001的高16位和低16位值,所以將100001表示為16進(jìn)制的形式:186a1h.

?

data1段的地址被編譯為00710h,10個(gè)數(shù)據(jù)被放入此;但是為什么在模擬器中此地址出現(xiàn)在棧的模擬中;

?

0710被放入DS寄存器;SI目前是0;

第一個(gè)數(shù)被放入BX中;over標(biāo)號(hào)編譯后的地址為020h;

?

第一個(gè)數(shù)加完,AX為5A(10進(jìn)制的90);

看BX是否為0;

加完一個(gè)數(shù),CX為1;

SI指向下一個(gè)數(shù);again編譯后的地址為0Eh;

累加;結(jié)果在AX中;

加完,看CX為10,AX為0279h=10進(jìn)制的633;

看前面圖,在整個(gè)過程中進(jìn)位標(biāo)志CF一直未變;

看變量窗口,除完后的結(jié)果為003Fh,此結(jié)果不包括余數(shù);

?

?

總結(jié)

以上是生活随笔為你收集整理的在8086模拟器中运行汇编求平均值程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。