




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
習(xí)題3:
1.編寫程序段,將2個(gè)32位無符號(hào)數(shù)DAT1和DAT2相乘,結(jié)果保存在64位
無符號(hào)數(shù)Result中;
2.有2個(gè)4字節(jié)無符號(hào)數(shù)分別存放在擴(kuò)展段2000H和3000H開始的單元中,
低位在前,高位在后,將兩數(shù)相加,結(jié)果存放在數(shù)據(jù)段2000H開始的單元
中,請(qǐng)編寫程序段完成以上功能;
3.8086系統(tǒng)中,請(qǐng)說明下列指令的源操作數(shù)的尋址方式是什么?
1)MOVAX,1234H
2)MOVAX,[1234H]
3)MOVAX,[BX]
4)MOVAX,1234H[BX+SI]
5)MOVSB
6)INAL,DX
4.請(qǐng)?jiān)谙卤碇挟嫵鱿铝袛?shù)據(jù)段以十六進(jìn)制表示的各單元值(表格中每個(gè)單元表
示一個(gè)字節(jié)),并寫出變量var1,var2,var3的偏移地址和ent的值。
dataSEGMENTpara—低地址
0030H
ORG30H
var1DB-2,'A',2dup('23')
var2DW-1
entEQU$-var1
var3DWvar2—
dataENDS
—高地址
5.以下程序?qū)崿F(xiàn)將變量var進(jìn)行var*10+600的操作,并將計(jì)算結(jié)果保存在變
量result中,當(dāng)程序執(zhí)行到地址M5的時(shí)候,請(qǐng)?jiān)谝韵卤砀裰挟嫵霎?dāng)前堆棧
指針的位置和堆棧里的內(nèi)容(程序斷點(diǎn)可以用標(biāo)號(hào),在堆棧中可用寄存器名
代表保存的內(nèi)容,SS的內(nèi)容不用指定,表格的每個(gè)單元表示一個(gè)字)。(6
分)
datasegment高地址
vardw1000
resultdd?
dataends
ssegsegmentstack
db100dup(?)
ssegends
低地址
codesegment
assumecs:code,ds:data,ss:ss_seg
mainprocfar
pushds
movax,0
pushax
movax,data
movds,ax
movax,var
M1:callCaculate
M2:dw10
M3:dw600
M4:leabx,result
mov[bx],ax
mov[bx+2],dx
ret
mainendp
Caculateproc
pushbp
movbp,sp
pushsi
pushbx
movbx,[bp+2]
movsi,cs:[bx]
mulsi
M5:addax,cs:2[bx]
adcdx,0
addbx,4
mov[bp+2],bx
popbx
popsi
popbp
ret
Caculateendp
codeends
endmain
6.問答題
1)若AL=81H,則執(zhí)行指令CBW后AH的內(nèi)容為多少?
2)若BL=BEH,執(zhí)行下列指令序列,則每執(zhí)行一步,BL和CF的值為多少?
SHLBL,1;BL=_—,CF=______
MOVCL,2
SHRBL,CL;BL=_—,CF=______
ORBL,80
SARBL,1;BL=_—,CF=______
RORBL,CL;BL=,CF=
INCCL
RCLBL,CLBL=,CF=
3)什么是短跳轉(zhuǎn)、近跳轉(zhuǎn)、遠(yuǎn)跳轉(zhuǎn)?
4)若當(dāng)前SP=1000H,CS=B000H,IP=0100H,且當(dāng)前FLAG=2345H,
則執(zhí)行指令I(lǐng)NT21H以后,SP的值變?yōu)槎嗌??堆棧段?個(gè)存儲(chǔ)單元
OFFFH、OFFEH、OFFDH、OFFCH.OFFBH、0FFAH的值分另1是多少?
7.請(qǐng)寫出程序段實(shí)現(xiàn)下列功能
例如:從160H端口讀取1個(gè)字節(jié)
MOVDX,160H
INAL,DX
1)將一個(gè)8位數(shù)20H寫入到地址為20H的端口;
2)若AL=56H,BL=57H,將這兩?個(gè)壓縮格式BCD碼相加并招結(jié)果
保存到存儲(chǔ)單元[2000H]中;
3)求數(shù)據(jù)段偏移地址為1000H開始的一個(gè)字符串的長度,字符串以
ASCII碼0為結(jié)束符,長度要求包括結(jié)束符;(提示:初始化AL=0
CX=0FFFFH,然后使用REPNZSCASB命令,最后根據(jù)CX的
值計(jì)算字符串長度)
8.請(qǐng)判斷以下8086匯編指令是否正確,:正確則在指令前打J,錯(cuò)誤則打X
01)MOVDS,1000H018)LEA[1000H],MSG
02)MOVDX,1000H019)LDSES,MSG
03)MOVIP,AX020)LESDX,MSG
04)MOV[1000H],[SI]021)ADDDS,1000H
05)PUSH[SI]022)ADCDX,[DI]
06)PUSHAL023)SUB[BX],1000H
07)PUSH200H024)SUB[BX+BP],1000H
08)POPCS025)IMUL100H
09)POPAX026)DIVwordptr100H[BP]
010)XCHGAX,DS027)ANDBP,1001H
011)XCHGAX,1000H[SI+DI]028)SHL[BX],1
012)INAX,[SI]029)RORAX,4
013)INBL,80H030)RCLwordptr[BX],CL
014)INAX,160H031)SARdwordptr[BX],CL
015)INAL,DX032)MOVSW
016)OUTAL,DX033)REPN2:SCASB
()17)OUT80H,AL034)RETI
習(xí)題3答案:
9.將2個(gè)32位無符號(hào)數(shù)DAT1和DAT2相乘,結(jié)果保存在64位無符號(hào)數(shù)中,
請(qǐng)編寫程序段。
datasegmentpara
dat1dd12345678H
dat2dd9ABCDEF0H
resultdq0
dataends
ss_segsegmentparastack
dw100dup(0)
ss_segends
codesegmentpara
assumecs:code,ds:data,ss:ss_seg
mainprocfar
movax,data
movds,ax
leadi,dat1
leasi,dat2
leabx,result
movax,[si];取dat2的低16位
;dat1低*dat2低->{dx,ax}
mulwordptr[di]
mov[bx],ax;保存結(jié)果
mov[bx+2],dx
movax,[si];再次取dat2低16位
;dat1高*dat2低->{dx,ax}
mulwordptr[di+2]
add[bx+2],ax;保存結(jié)果
adc[bx+4],dx
adcwordptr[bx+6],0
movax,[si+2];Wdat2的高16位
;dat1低*dat2高->{dx,ax}
mulwordptr[di]
add[bx+2],ax
adc[bx+4],dx
adcwordptr[bx+6],0
movax,[si+2];再次取dat2的高16位
;dat1高*dat2高->{dx,ax}
mulwordptr[di+2]
add[bx+4],ax
adc[bx+6],dx
movax,4c00h
int21h
mainendp
codeends
endmain
X補(bǔ)充:將2個(gè)32位有符號(hào)數(shù)datal和data2相乘,結(jié)果保存在64位有符號(hào)
數(shù)中result中,請(qǐng)編寫完整匯編語言程序。
datasegmentpara
dataldd0FFFF8000H
data2dd0FFFF8000H
resultdq0
dataends
ss_segsegmentparastack
dw100dup(O)
ss_segends
codesegmentpara
assumecs:code,ds:data,ss:ss_seg
mainprocfar
movax,data
movds,ax
leasi,data2;si->data2
leadi,datal;di->datal
leabx,result;bx>>result
testwordptr[si+2],8000h;判斷data2是正數(shù)還是負(fù)數(shù)
jzmainl
movcl,1;cl=1,表明data2為負(fù)數(shù)
movax,0
movdx,0
subax,[si];求data2相反數(shù)
sbbdx,[si+2]
jmpmain2
mainl:
movcl,0;cl=0,表明data2為正數(shù)
movax,[si]
movdx,[si+2]
main2:
pushdx;data2絕對(duì)值入棧
pushax
testwordptr[di+2],8000h;判斷datal是正數(shù)還是負(fù)數(shù)
jzmain3
movch,1;ch=1,表明datal為負(fù)數(shù)
movax,0
movdx,0
subax,[di];求datal相反數(shù)
sbbdx,[di+2]
jmpmain4
main3:
movch,0;ch=0,表明datal為正數(shù)
movax,[di]
movdx,[di+2]
main4:
pushdx;data1絕對(duì)值入棧
pushax
callmuI_u32;按32位無符號(hào)數(shù)相乘,得到相應(yīng)結(jié)果
xorch,cl;ch為異或結(jié)果,若為o
惻datal*data2為正,否則為負(fù)
jzexit;結(jié)果若為正數(shù),則直接返回
movax,0;否則對(duì)result求補(bǔ)
movdx,0
subax,[bx]
sbbdx,[bx+2]
mov[bx],ax
mov[bx+2],dx
movax,0
movdx,0
sbbax,[bx+4]
sbbdx,[bx+6]
mov[bx+4],ax
mov[bx+6],dx
exit:
movax,4cOOh
int21h
mainendp
;功能:實(shí)現(xiàn)兩個(gè)32位無符號(hào)數(shù)相乘,利用堆棧傳遞參數(shù)
;輸入?yún)?shù):bx->result
;輸出參數(shù):result中存放乘積
mul_u32proc
pushibp
movbp,sp
movax,[bp+8];Wd2低16位
mulwordptr[bp+4];d1低16位*d2低16位->{dx,ax}
mov[bx],ax;保存結(jié)吳
mov[bx+2],dx
movax,[bp+8]
mulwordptr[bp+6];d1高16位*d2低16位->{dx,ax}
add[bx+2],ax;保存結(jié)昊
adc[bx+4],dx
adcwordptr[bx+6],0
movax,[bp+10];<d2高16位
mulwordptr[bp+4];d1低16位*d2高16位->{dx,ax}
add[bx+2],ax
adc[bx+4],dx
adcwordptr[bx+6],0
movax,[bp+10]
mulwordptr[bp+6];d1高16位*d2高16位->{dx,ax}
add[bx+4],ax
adc[bx+6],dx
popbp
ret8
mul_u32erdp
codeends
endmain
10.有2個(gè)4字節(jié)無符號(hào)數(shù)分別存放在擴(kuò)展段2000H和3000H開始的單元中,
低位在前,高位在后,將兩數(shù)相加,結(jié)果存放在數(shù)據(jù)段2000H開始的單元
中,請(qǐng)編寫程序段完成以上功能;
MOVAX,wordptrES:[2000H]
ADDAX,wordptrES:[3000H]
MOV[2000H],AX
MOVAX,wordptrES:[2002H]
ADCAX,wordptrES:[3002H]
MOV[2002H],AX
11.8086系統(tǒng)中,請(qǐng)說明下列指令的源操作數(shù)的尋址方式是什么?
1)MOVAX,1234H立即數(shù)尋址
2)MOVAX,[1234H]直接尋址
3)MOVAX,[BX]寄存器間接尋址
4)MOVAX,1234H[BX+SI]相對(duì)基址變址尋址
5)MOVSB數(shù)據(jù)串尋址
6)INAL,DXI/O端口間接尋址
12.請(qǐng)?jiān)谙卤碇挟嫵鱿铝袛?shù)據(jù)段以十六進(jìn)制表示的各單元值(表格中每個(gè)單元表
示一個(gè)字節(jié)),并寫出變量var1,var2,var3的偏移地址和ent的值。
dataSEGMENTpara
0030HFEH
ORG30H
41H
var1DB-2,'A',2dup('23')32H
33H
var2DW-1
32H
entEOU$-var133H
FFH
FFH
36H
OOH
高地址
var3DWvar2
dataends
var1:0030Hvar2:0036Hvar3:0038Hent=8
13.以下程序?qū)崿F(xiàn)將變量var進(jìn)行var*10+600的操作,并將計(jì)算結(jié)果保存在變
量result中,當(dāng)程序執(zhí)行到地址M5的時(shí)候,請(qǐng)?jiān)谝韵卤砀裰挟嫵霎?dāng)前堆棧
指針的位置和堆棧里的內(nèi)容(程序斷點(diǎn)可以用標(biāo)號(hào),在堆棧中可用寄存器名
代表保存的內(nèi)容,SS的內(nèi)容不用指定,表格的每個(gè)單元表示一個(gè)字)。(6
分)
datasegment
vardw1000
resultdd?高地址
dataendsDS
0
ssegsegmentstack
M2
db100dup(?)BP
SI
ssegends
BX
codesegment
assumecs:code,ds:data,ss:ss_seg
低地址
mainprocfar
pushds
movax,0
pushax
movax,data
movds,ax
movax,var
M1:callCaculate
M2:dw10
M3:dw600
M4:leabx,result
mov[bx],ax
mov[bx+2],dx
ret
mainendp
Caculateproc
pushbp
movbp,sp
pushsi
pushbx
movbx,[bp+2]
movsi,cs:[bx]
mulsi
M5:addax,cs:2[bx]
adcdx,0
addbx,4
mov[bp+2],bx
popbx
popsi
popbp
ret
Caculateendp
codeends
endmain
14.問答題
1)若AL=81H,則執(zhí)行指令CBW后AH的內(nèi)容為多少?AH=OFFH
2)若BL=BEH,執(zhí)行下列指令序列,則每執(zhí)行一步,BL和CF的值為多少?
SHLBL,1;BL=7cH,CF=[
MOVCL,2
SHRBL,CL;BL=1FH,CF=0
ORBL,80
SARBL,1;BL=2FH,CF=1
RORBL,CL;BL=CBH,CF=1
INCCL
RCLBL,CL;BL=5FH,CF=0
3)什么是短跳轉(zhuǎn)、近跳轉(zhuǎn)、遠(yuǎn)跳轉(zhuǎn)?
短跳轉(zhuǎn):段內(nèi)直接跳轉(zhuǎn),偏移量為T28727
近跳轉(zhuǎn):段內(nèi)直接跳轉(zhuǎn),偏移量為-32768~32767
遠(yuǎn)跳轉(zhuǎn):段間直接跳轉(zhuǎn)
4)若當(dāng)前SP=1000H,CS=B000H,IP=0100H,且當(dāng)前FLAG=2345H,
則執(zhí)行指令I(lǐng)NT21H以后,SP的值變?yōu)槎嗌??堆棧段?個(gè)存儲(chǔ)單元
OFFFH、OFFEH、OFFDH、0FFCH、OFFBH、0FFAH的值分別是多少?
SP=0FFAH,(0FFFH)=23H(0FFEH)=45H
(0FFDH)=BOH(0FFCH)=00H
(0FFBH)=01H(0FFAH)=00H
15.請(qǐng)寫出程序段實(shí)現(xiàn)下列功能
例如:從160H端口讀取1個(gè)字節(jié)
MOVDX,160H
INAL,DX
4)將一個(gè)8位數(shù)20H寫入到地址為20H的端口;
MOVAL,20H
OUT20H,AL
5)若AL=56H,BL=57H,將這兩個(gè)壓縮格式BCD碼相加并將結(jié)果
保存到存儲(chǔ)單元[2000H]中;
ADDAL,BL
DAA
MOV[2000H],AL
6)求數(shù)據(jù)段偏移地址為1000H開始的一個(gè)字符串的長度,字符串以
ASCII碼0為結(jié)束符,長度要求包括結(jié)束符;(提示:初始化AL=0
CX=0FFFFH,然后使用REP
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼寧軌道交通職業(yè)學(xué)院《分子生物學(xué)4》2023-2024學(xué)年第二學(xué)期期末試卷
- 濟(jì)南2025年山東濟(jì)南市鋼城區(qū)所屬事業(yè)單位招聘初級(jí)綜合類崗位26人筆試歷年參考題庫附帶答案詳解-1
- 綿陽飛行職業(yè)學(xué)院《消化系統(tǒng)疾病》2023-2024學(xué)年第二學(xué)期期末試卷
- 成都醫(yī)學(xué)院《DesignofStructures》2023-2024學(xué)年第二學(xué)期期末試卷
- 青島電影學(xué)院《作物育種學(xué)總論》2023-2024學(xué)年第二學(xué)期期末試卷
- 河源廣東河源市消防救援支隊(duì)2025年第一批政府專職消防員招聘86人筆試歷年參考題庫附帶答案詳解
- 動(dòng)物炭黑、動(dòng)物膠及其衍生物項(xiàng)目效益評(píng)估報(bào)告
- 沈陽工業(yè)大學(xué)《藥用作物栽培學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025屆高考語文補(bǔ)充背誦詩詞:《青玉案·元夕》教學(xué)設(shè)計(jì)
- 南京視覺藝術(shù)職業(yè)學(xué)院《Java應(yīng)用設(shè)計(jì)案例》2023-2024學(xué)年第二學(xué)期期末試卷
- 海洋鉆井(平臺(tái))
- (完整版)電梯的鋼結(jié)構(gòu)施工方案
- 中國近現(xiàn)代史綱要ppt全共64頁課件
- 腰椎間盤突出癥(腰痹病)中醫(yī)臨床路徑
- 教學(xué)團(tuán)隊(duì)建設(shè)總結(jié)報(bào)告
- 研發(fā)經(jīng)費(fèi)填報(bào)指標(biāo)說明及核算方法
- 裝飾施工進(jìn)度計(jì)劃網(wǎng)絡(luò)圖及橫道圖
- 一年級(jí)思維訓(xùn)練(課堂PPT)
- 實(shí)木電腦桌書桌安裝圖
- GB_T 27025-2019 檢測和校準(zhǔn)實(shí)驗(yàn)室能力的通用要求(高清版)
- 俱樂部經(jīng)營俱樂部經(jīng)營
評(píng)論
0/150
提交評(píng)論