




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
習題3:
1.編寫程序段,將2個32位無符號數DAT1和DAT2相乘,結果保存在64位
無符號數Result中;
2.有2個4字節無符號數分別存放在擴展段2000H和3000H開始的單元中,
低位在前,高位在后,將兩數相加,結果存放在數據段2000H開始的單元
中,請編寫程序段完成以上功能;
3.8086系統中,請說明下列指令的源操作數的尋址方式是什么?
1)MOVAX,1234H
2)MOVAX,[1234H]
3)MOVAX,[BX]
4)MOVAX,1234H[BX+SI]
5)MOVSB
6)INAL,DX
4.請在下表中畫出下列數據段以十六進制表示的各單元值(表格中每個單元表
示一個字節),并寫出變量var1,var2,var3的偏移地址和ent的值。
dataSEGMENTpara—低地址
0030H
ORG30H
var1DB-2,'A',2dup('23')
var2DW-1
entEQU$-var1
var3DWvar2—
dataENDS
—高地址
5.以下程序實現將變量var進行var*10+600的操作,并將計算結果保存在變
量result中,當程序執行到地址M5的時候,請在以下表格中畫出當前堆棧
指針的位置和堆棧里的內容(程序斷點可以用標號,在堆棧中可用寄存器名
代表保存的內容,SS的內容不用指定,表格的每個單元表示一個字)。(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,則執行指令CBW后AH的內容為多少?
2)若BL=BEH,執行下列指令序列,則每執行一步,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)什么是短跳轉、近跳轉、遠跳轉?
4)若當前SP=1000H,CS=B000H,IP=0100H,且當前FLAG=2345H,
則執行指令INT21H以后,SP的值變為多少?堆棧段中6個存儲單元
OFFFH、OFFEH、OFFDH、OFFCH.OFFBH、0FFAH的值分另1是多少?
7.請寫出程序段實現下列功能
例如:從160H端口讀取1個字節
MOVDX,160H
INAL,DX
1)將一個8位數20H寫入到地址為20H的端口;
2)若AL=56H,BL=57H,將這兩?個壓縮格式BCD碼相加并招結果
保存到存儲單元[2000H]中;
3)求數據段偏移地址為1000H開始的一個字符串的長度,字符串以
ASCII碼0為結束符,長度要求包括結束符;(提示:初始化AL=0
CX=0FFFFH,然后使用REPNZSCASB命令,最后根據CX的
值計算字符串長度)
8.請判斷以下8086匯編指令是否正確,:正確則在指令前打J,錯誤則打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
習題3答案:
9.將2個32位無符號數DAT1和DAT2相乘,結果保存在64位無符號數中,
請編寫程序段。
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;保存結果
mov[bx+2],dx
movax,[si];再次取dat2低16位
;dat1高*dat2低->{dx,ax}
mulwordptr[di+2]
add[bx+2],ax;保存結果
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補充:將2個32位有符號數datal和data2相乘,結果保存在64位有符號
數中result中,請編寫完整匯編語言程序。
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是正數還是負數
jzmainl
movcl,1;cl=1,表明data2為負數
movax,0
movdx,0
subax,[si];求data2相反數
sbbdx,[si+2]
jmpmain2
mainl:
movcl,0;cl=0,表明data2為正數
movax,[si]
movdx,[si+2]
main2:
pushdx;data2絕對值入棧
pushax
testwordptr[di+2],8000h;判斷datal是正數還是負數
jzmain3
movch,1;ch=1,表明datal為負數
movax,0
movdx,0
subax,[di];求datal相反數
sbbdx,[di+2]
jmpmain4
main3:
movch,0;ch=0,表明datal為正數
movax,[di]
movdx,[di+2]
main4:
pushdx;data1絕對值入棧
pushax
callmuI_u32;按32位無符號數相乘,得到相應結果
xorch,cl;ch為異或結果,若為o
惻datal*data2為正,否則為負
jzexit;結果若為正數,則直接返回
movax,0;否則對result求補
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
;功能:實現兩個32位無符號數相乘,利用堆棧傳遞參數
;輸入參數:bx->result
;輸出參數:result中存放乘積
mul_u32proc
pushibp
movbp,sp
movax,[bp+8];Wd2低16位
mulwordptr[bp+4];d1低16位*d2低16位->{dx,ax}
mov[bx],ax;保存結吳
mov[bx+2],dx
movax,[bp+8]
mulwordptr[bp+6];d1高16位*d2低16位->{dx,ax}
add[bx+2],ax;保存結昊
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個4字節無符號數分別存放在擴展段2000H和3000H開始的單元中,
低位在前,高位在后,將兩數相加,結果存放在數據段2000H開始的單元
中,請編寫程序段完成以上功能;
MOVAX,wordptrES:[2000H]
ADDAX,wordptrES:[3000H]
MOV[2000H],AX
MOVAX,wordptrES:[2002H]
ADCAX,wordptrES:[3002H]
MOV[2002H],AX
11.8086系統中,請說明下列指令的源操作數的尋址方式是什么?
1)MOVAX,1234H立即數尋址
2)MOVAX,[1234H]直接尋址
3)MOVAX,[BX]寄存器間接尋址
4)MOVAX,1234H[BX+SI]相對基址變址尋址
5)MOVSB數據串尋址
6)INAL,DXI/O端口間接尋址
12.請在下表中畫出下列數據段以十六進制表示的各單元值(表格中每個單元表
示一個字節),并寫出變量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.以下程序實現將變量var進行var*10+600的操作,并將計算結果保存在變
量result中,當程序執行到地址M5的時候,請在以下表格中畫出當前堆棧
指針的位置和堆棧里的內容(程序斷點可以用標號,在堆棧中可用寄存器名
代表保存的內容,SS的內容不用指定,表格的每個單元表示一個字)。(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,則執行指令CBW后AH的內容為多少?AH=OFFH
2)若BL=BEH,執行下列指令序列,則每執行一步,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)什么是短跳轉、近跳轉、遠跳轉?
短跳轉:段內直接跳轉,偏移量為T28727
近跳轉:段內直接跳轉,偏移量為-32768~32767
遠跳轉:段間直接跳轉
4)若當前SP=1000H,CS=B000H,IP=0100H,且當前FLAG=2345H,
則執行指令INT21H以后,SP的值變為多少?堆棧段中6個存儲單元
OFFFH、OFFEH、OFFDH、0FFCH、OFFBH、0FFAH的值分別是多少?
SP=0FFAH,(0FFFH)=23H(0FFEH)=45H
(0FFDH)=BOH(0FFCH)=00H
(0FFBH)=01H(0FFAH)=00H
15.請寫出程序段實現下列功能
例如:從160H端口讀取1個字節
MOVDX,160H
INAL,DX
4)將一個8位數20H寫入到地址為20H的端口;
MOVAL,20H
OUT20H,AL
5)若AL=56H,BL=57H,將這兩個壓縮格式BCD碼相加并將結果
保存到存儲單元[2000H]中;
ADDAL,BL
DAA
MOV[2000H],AL
6)求數據段偏移地址為1000H開始的一個字符串的長度,字符串以
ASCII碼0為結束符,長度要求包括結束符;(提示:初始化AL=0
CX=0FFFFH,然后使用REP
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 漯河食品職業學院《微觀高級社會工作實務》2023-2024學年第二學期期末試卷
- 山西警官職業學院《學前保教管理》2023-2024學年第二學期期末試卷
- 寧夏工業職業學院《景觀設計與規劃》2023-2024學年第二學期期末試卷
- 電子樂器演奏技巧與風格研究考核試卷
- 硅材料在半導體行業的質量控制考核試卷
- 滑動軸承的表面處理新技術探討考核試卷
- 碳酸飲料市場趨勢預測與展望考核試卷
- 硫酸鉀在動物營養補充中的應用研究考核試卷
- 照明設備在舞臺劇中的情感傳遞考核試卷
- 海底隧道工程中的施工成本分析考核試卷
- 地鐵施工監測監理細則
- 江蘇省蘇州市2024-2025學年度第二學期七年級歷史期中模擬試卷(1)含答案
- 住建局安全管理匯報
- 2024年山東省國控設計集團有限公司招聘筆試真題
- 學校校園膳食監督家長委員會履職承諾協議書
- 粉體輸送設備安裝工程施工合同
- 人教版七年級英語下冊 Unit5 Here and Now(上課、復習課件)
- 智能交通系統在城市管理中的應用與前景
- 果園種植管理合作合同范本
- 2025年江蘇省高職單招《英語》高頻必練考試題庫400題(含答案)
- 電力檢修安全培訓
評論
0/150
提交評論