版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
习题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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度股东持股权益变动与公司长期发展战略协议
- 施工现场施工防地质灾害制度
- 职场演讲稿的创意写作技巧
- 持续关注客户体验银行如何通过CRM提升其贷款业务的稳健性
- 防疫物资保障应急预案
- 二手房屋买卖合同协议
- 中外合资饭店建设与运营合同
- 三方就业合同模板
- 产学研合作协议合同样本
- 个体工商户临时用工合同协议
- 某省博物馆十大展陈评选项目申报书
- GB/T 9109.5-2017石油和液体石油产品动态计量第5部分:油量计算
- GB/T 16316-1996电气安装用导管配件的技术要求第1部分:通用要求
- GA/T 455-2021居民身份证印刷要求
- 邀请函模板完整
- 建设工程施工合同纠纷涉及的法律适用问题课件
- 2023年江苏省南京市中考化学试卷2
- 2023辽宁医药职业学院单招数学模拟试题(附答案解析)
- 2022年武汉协和医院医护人员招聘考试笔试题库及答案解析
- 工程勘察设计收费标准快速计算表(EXCEL)
- 甲基乙基酮2-丁酮MSDS危险化学品安全技术说明书
评论
0/150
提交评论