汇编语言程序设计 程学先 汇编第2、3,4章作业参考答案
更新时间:2023-11-10 02:46:01 阅读量: 教育文库 文档下载
- 汇编语言程序设计推荐度:
- 相关推荐
2.16编写程序段,使(AH)与( AL)中的内容互换。 解1
MOV BL,AL MOV AL,AH. MOV AH,BL 解2
XCHG AH,AL
2.17编写程序段,使 (BL) 中高 4 位与低 4 位内容互换。 解1 MOV CL,4 MOV BH,0 SHL BX,CL ADD BL,BH 解2
MOV CL,4 ROL BL,CL
2.18编写程序段,实现当(DL)是奇数时使(AL)=31H,否则使(AL)=30H。 SHR DL,1 MOV AL,0 RCL AL,1
ADD AL,30H
2.20设寄存器AX中存放 1234H,BX寄存器中存放 1 ,执行 DIV BL 指令后,会发生什么现象?为什么?
溢出,商超过8位,在AL中存放不下商。
2.21设 DX 寄存器中存放值为 0 ,AX中存放 1234H,BX中存放 1 ,执行 DIV BX 后,是否会出现与 2.20 相同现象?为什么? 不会,因为是16位除法,商未超过16位
2.22一字数据压栈时堆栈指针如何改变?弹出一字数据时堆栈指针如何改变? 压栈时堆栈指针减2;弹出一字数据时堆栈指针加2 2.23 已知(SP)=2088H,(AX)=1A89H,(BX)=90CDH。依次执行以下三条指令后,画图说明堆栈中数据情况,及SP、AX、BX中数据。 PUSH AX
PUSH BX POP AX (SP)=2086H,(AX)=90CDH,(BX)=90CDH。 *2.25编写程序段求8!(8的阶乘)。
MOV AX,8
MOV BX,7 NEXT:DX,0 MUL BX DEC BX
JNZ NEXT
2.27假设(AX)=07EH,变量BUFFER中存放的内容为B5H,求下列各条指令单独执行后的结果。
(1) AND AX,BUFFER 34H (2) XOR AX,BUFFER CBH (3) OR AX,BUFFER 0FFH (4) AND AX,0 0 (5) XOR AX,OFFH 81H
(6) TEST AX,8000H 相与结果为0时。AX为正,值不变
*2.28编写程序段,判断(AL)中的有符号数是正数还是负数,正数在CL中写0,否则写1。
CMP AL,0 MOV CL,0
JGE NEXT MOV CL,1 NEXT:??
2.29编写程序段,对存放在(DX)、(AX)中的双字数据求补。 MOV BX,0 SUB BX,AX MOV AX,BX MOV BX,0 SBB BX,DX
MOV DX,BX
2.31假设(DX)=78D5H,(CL)=5,CF=0,确定下列各条指令单独执行后(DX)中的值。 (1)SHL DH,1 (DX)=F0D5H (2)SAL DX, CL (DX)=1AA0H (3)SHR DX,CL (DX)=03C6H (4)SAR DL,1 (DX)=78EAH (5)ROL DX,CL (DX)=1AAFH (6)RCR DL,1 (DX)=786AH (7)RCL DH,CL (DX)=0FD5H 2.32按下列要求编写指令序列。
(1)清除DH中最低3位而不改变其他位,结果存入BH。 AND DH,0F8H
(2)将DI中最高3位置1而不改变其他位。 OR DI,0E000H
(3)将AX中0~3位置1、7~9位取反、其他位清0。 OR AX,0FH XOR AX,380H
AND AX,38FH
(4)检查BX中第2、5、9位是否至少有1位是1。 TEST AX,224H 如果结果非0
(5)检查CX中第1、6、11位是否同时为1。
NOT CX
TEST CX,842H 如果结果为0
(6)检查BX中第0、2、9、13位是否至少有1位是0。 NOT BX
TEST BX,2205H 如果结果非0
(7)检查DX中第1、4、11、14位是否同时是0。 TEST DX,4812H 如果结果为0 2.33编写指令序列分别实现下述功能。 (1)右移DI3位,并将0移入最高位。 MOV CL,3
SHR DI,CL
(2)将AL左移一位,将0移入最低位。 SHL AL,1
(3)DX右移6位且保持正负特性不变。
MOV CL,6 SAR DX,CL
(4)将AL中压缩BCD码变成AX中的非压缩BCD码。 MOV AH,0 MOV CL,4 SHL AL,CL
MOV CL,4 SHR AL,CL
2.34分析下面的程序段完成什么功能?
MOV CL,4 SHR AX,CL MOV BL,DL SHR DX,CL SHL BL,CL OR AH,BL
将双字(DX,AX)逻辑右移4位
*2.35设数据段偏移地址1000H处开始存放有10个字节数据,将其求和,结果存放在AX中。
MOV CX,10 MOV SI,1000H MOV AX,0 CLC
LOOP1:ADC AX,[SI] INC SI
LOOP LOOP1
2.37 从键盘输入0到9之间某数字字符,利用列表法将该数字的平方值放到AL中。 SUB DB 0,1,4,9,16,25,36,49,64,81
MOV AH,1 INT 21H SUB AL,30H MOV BL,AL MOV BH,0
MOV AL,SUB[BX]
2.38 已知X、Y、Z、P、K均为16位带符号数,求计算 (1000+X*Y-Z)/P的程序段。注明结果的商与余数所存放的位置。
MOV AX, X
IMUL Y ; x*y MOV CX, AX MOV BX, DX
MOV AX, Z
CWD ;符号扩展,AX中符号扩展到DX中 SUB CX, AX
SBB BX, DX MOV AX, 1000 MOV DX,0 SUB AX, CX
SBB DX, BX MOV BX, P
IDIV BX
x*y-z ;(1000+X*Y-Z)/P ; 4.1编制程序计算Y=5X+7,设X值在DAX字节单元,结果存入RLT字节单元。X为带符号整数。 DATA SEGMENT DAX DB 15H RLT DB 0 DATA ENDS
STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS CODE SEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE START:MOV AX,DATA MOV DS,AX MOV AL,DAX
MOV BL,5 ;X*5
IMUL BL ;有符号数乘法 ADD AL,7 MOV RLT,AL MOV AH,4CH INT 21H CODE ENDS
END START
;DAX绝对值不能超过18H (0-18H或0FFH-0E9H)。 ;否则,RLT得为字类型,ADD AL,7改为ADD AX,7 ;因为7已知为正,无需符号扩展。
4.3 编制程序计算X-Y。设X、Y分别在DAX、DAY单元,结果存入RESULT单元。 (1)X、Y为字节数据 (2)X、Y为字数据 (3)X、Y为双字节数据 要求:存取数据时至少使用三种不同的寻址方式。 1、用直接寻址 DATA SEGMENT DAX DB 18H DAY DB 65H RESULT DB 0 DATA ENDS
STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS
CODE SEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE START:MOV AX,DATA
MOV DS,AX
MOV AL,DAX ; 源操作数为直接寻址 SUB AL,DAY MOV RESULT,AL
4.17 BUFX、BUFY和BUFZ是3个有符号16进制数,编写程序实现 (1)如果这3个数都不相等,则显示0;
(2)如果这3个数中有两个数相等,则显示1; (3)如果这3个数都相等,则显示2。 MOV CL, 0 ;计数 MOV AX, BUFX
CMP AX, BUFY
JNE NEXT1
INC CL ;如果 BUFX和BUFY相等,将CL加1
NEXT1:MOV AX, BUFY
CMP AX, BUFZ
JNE NEXT2
INC CL ;如果 BUFY和BUFZ相等,将CL加1
NEXT2:MOV AX, BUFX
CMP AX, BUFZ JNE NEXT3
INC CL ;如果 BUFX和BUFZ相等,将CL加1
NEXT3: CMP CL, 3
JNE NEXT4
DEC CL ;如果CL为3,减为2
NEXT4: ;
4.18已知三个无符号数A、B、C,存放在ADR开始的连续单元,编写程序完成下述功能,若A、B、C同时为偶数,将FLAG单元置1;若同时为奇数,将FLAG单元置0;否则FLAG单元置全1。
解法1:如果ABC为字节类型:
MOV CL, 0 ;计数
MOV AL, ADR
SHR AL, 1 ;右移A,如果A为偶,CF将为0,否则为1
JC NEXT1
INC CL ;A为偶,将CL加1
NEXT1: MOV AL, ADR+1 ;字节类型加1
SHR AL, 1
JC NEXT 2
INC CL ;B为偶,将CL加1
NEXT2: MOV AL, ADR+2
SHR AL, 1 JC NEXT 3
INC CL ;C为偶,将CL加1
NEXT3: CMP CL, 3 ;以下判断CF,为3,则将FLAG单元置1 JNE NEXT4 MOV FLAG,1 JMP EXIT
NEXT4: CMP CL,0 ;以下判断CF,为0,则将FLAG单元置0 JNE NEXT5 MOV FLAG,0 JMP EXIT NEXT5: MOV FLAG,-1 EXIT:
解法2,如果ADR为字类型
MOV CL,0 MOV AX,ADR
TEST AX,0001H ;与上一方法不同点,改为测试第0位 JNZ NEXT1
INC CL
NEXT1: MOV AX,ADR+2 ;字类型加2 TEST AX,0001H JNZ NEXT2 INC CL
NEXT2:MOV AX,ADR+4 TEST AX,0001H JNZ NEXT3 INC CL
NEXT3: CMP CX,0 JZ NEXT5 CMP CL,3 JZ NEXT4
MOV CL,0FFH JMP NEXT5 NEXT4:MOV CL,1
NEXT5:MOV FLAG,CL
4.20要求A、B、C三数的中间数(中间数即该数小于一数而大于另一数),其中A、B、C及中间数的存储单元自行定义。假设A、B和C为无符号数,编写相关程序。若A、B和C为有符号数,则应如何修改程序。
A DB 39H B DB 54H C DB 6AH
D DB ? ??
;只要将A、B、C从小到大排序,中间位置的就是中间数 MOV AL, A
CMP AL, B
JBE NEXT1
XCHG AL,B ;A>B.交换AB的位置 MOV A,AL NEXT1: MOV AL, B CMP AL, C
JBE NEXT2
XCHG AL,C ;B>C.交换BC的位置 MOV B,AL
NEXT2: MOV AL, A ;再比较AB
CMP AL, B JBE NEXT3
XCHG AL,B ;A>B.交换AB的位置 MOV A,AL
NEXT3: MOV AL, B MOV D, AL
; 有符号数题解见下题解,只将JBE换为JLE就可以了。
4.21已知A、B和C存放在ADR开始单元,编制程序使之按递增顺序存放在NEW开始的单元。设A、B和C为带符号数。 MOV AL, A
CMP AL, B
JLE NEXT1
XCHG AL,B ;A>B.交换AB的位置 MOV A,AL NEXT1: MOV AL, B
CMP AL, C JLE NEXT2
XCHG AL,C ;B>C.交换BC的位置 MOV B,AL
NEXT2: MOV AL, A ;再比较AB
CMP AL, B JLE NEXT3
XCHG AL,B ;A>B.交换AB的位置 MOV A,AL
4.23 编制程序计算:
X*Y (Y>=0,X>=0) S= X/Y (X<0,Y<0 ∣X+Y∣ (其它)
设X,Y为双字节带符号数据,分别存放在DAX,DAY单元,计算结果存入RLT单元。 RLT DW ? DAX DW ? DAY DW ?
MOV CX,0
MOV AX, DAX CMP AX,0 JL NEXT1 INC CX ;X>=0 NEXT1:MOV BX, DAY CMP BX,0 JL NEXT2 INC CX ;Y>=0 NEXT2:CMP CX,2
JZ NEXT3 ; X*Y CMP CX,0
JZ NEXT4 ; X/Y ADD AX,BX JO NEXT5 CMP AX,8000H JL NEXT5 NEG AX NEXT5:MOV DAX,AX JMP EXIT1 NEXT4:MOV DX,0 IDIV BX
MOV DAX,AX JMP EXIT1 NEXT3:IMULBX
MOV DAX,AX
MOV DAY,DX EXIT1:
4.24编写程序,将一个包含有20个有符号数据的数组ARRAYM分成两个数组,正数数组ARRAYP和负数数组ARRAYN,并分别把这两个数组中的数据个数显示出来。 ARRAYM DB 20,48,149,212,33,200,198,23,25,53,199,214,225,245,123,1,12,43,54,165 COUNT EQU $-ARRAYM ARRAYP DB COUNT DUP(0) ARRAYN DB COUNT DUP(0) ??
MOV BX,OFFSET ARRAYM ;源数据 MOV SI,OFFSET ARRAYP ;存正数 MOV DI,OFFSET ARRAYN ;存负数 MOV DH,0 ; 正数个数 MOV DL,0 ; 负数个数 MOV CX, COUNT
LOOP1:MOV AL,[BX] ; 源数据中取1个数
SHL AL,1 ; 看最高位
JC NEXT1 ; 最高位为1则CF为1,有进位是负数 MOV [SI],AL ;存正数
INC SI ; 正数指针加1 INC DH ; 正数个数加1 JMP NEXT2
NEXT1: MOV [DI],AL ;存负数
INC DI
INC DL NEXT2:INC BX LOOP LOOP1
4.25 已知内存DATA开始的存储区存放若干个字节数据,数据个数在COUNT单元中存放。编制程序求其中正数平均值及负数平均值,并分别存入MEANP和MEANM单元。 BUF DB 27H,59H,0B3H,32H,8AH COUNT EQU $-BUF
MEANP DB ? ;存正数平均值 MEANM DB ? ;存负数平均值
LEA SI,BUF ;指向BUF MOV CX,COUNT MOV DI,0 MOV BP,0 MOV DX,0 MOV BX,0
MOV AH,0
CLC ;清进位位 L1:MOV AL,[SI]
CMP AL,0
JL NEXT1 ;负数在NEXT1处理 ADC DL,AL
ADC DH ;正数加到DX中 INC DI ;正数个数加1 JMP NEXT2
NEXT1: NEG AL ;负数求其绝对值 ADC BL,AL ;加到BX中 ADC BH
INC BP ;负数个数加1
NEXT2: INC SI ;准备取下一个数 LOOP L1
NEG BX ;负数之和
MOV CX,DI ;正数个数
正在阅读:
汇编语言程序设计 程学先 汇编第2、3,4章作业参考答案11-10
锡林郭勒盟苏尼特左旗英语六年级下册Units 1-2 词语专练05-20
2012年4月建筑材料自考试题12-07
餐桌前的谈话作文700字06-15
阅读兴趣的培养10-23
争执的作文400字4篇03-27
桩基施工员考试题11-28
通用技术 结构与设计 单元测试 习题10-16
图形数据结构实验03-11
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 汇编语言
- 程序设计
- 汇编
- 作业
- 答案
- 参考
- 程学先
- 部编版三年级语文上册17《古诗三首》教学设计
- 妇联换届选举工作流程图
- BP神经网络预测代码
- 关于金钱和幸福的对话
- 沈阳工程学院简历模版 - 图文
- 时代光华《企业知识管理实施》课后试题答案
- 高中历史题型专练:全国卷41题小论文
- 第二届全国高校无机非金属材料基础知识大赛决赛试题
- 外国建筑史期末考试复习重点知识点简答大题
- 化工原理第三章习题及答案
- 关于加强基层工会组织建设的通知
- 繁星春水赏析
- 《教师语言技能》教案
- 中国政法大学法律史考研 招生人数 参考书 报录比 复试分数线 考研真题 考研经验 招生简章
- 2019年华中农业大学研究生B班第三单元 -
- c++模板及应用习题答案
- 高中数学竞赛专题讲座 - 简单的染色问题
- 狭义相对论习题、答案与解法(2010.11.22)
- 重点监管的危险化工工艺目录(2013版)
- 八年级物理14年秋期中考点整理