汇编复习习题答案
更新时间:2024-06-08 00:06:01 阅读量: 综合文库 文档下载
- 汇编复制指令推荐度:
- 相关推荐
所有十二种寻址方式必须必须必须牢牢记住,按照以往的经验是百分百会考,20分;指出程序的错误,百分百会考,16或者20分;说明程序的功能,课后习题就三四道,一定会考至少一到两道题,5-10分;应该会有补充程序题,也是课后题,所以就自己多注意。选择题和最后的编程就看自己的本事了。
红色黄底的必须全部记住,死死地,百分百保证记住,标红的也要全部记住,必须全部记住。后边没标红的程序,一般会考两道程序题,但是不敢确定是哪几道,所以程序题属于看自己的水平,能记住的就多记几道,否则自求多福。学霸自重!
我这只是当时的复习内容,现在一定要对一下有没有漏掉的,自行补充。或者找一个比较认真的同学整理一份大家共享。
2.3 在IBM PC机的存储器中存放信息如右下图所示。试读出30022H和30024H字节单元的
内容,以及30021H和30022H字单元的内容。
答:30022H字节单元的内容为ABH;30024H字节单元的内容为EFH。30021H字单元
的内容为AB34H;30022H字单元的内容为CDABH。 存储器 2.4 在实模式下,段地址和偏移地址为3017:000A的存储单元的物理地址是什么?如果段地址和偏移地址是3015:002A和3010:007A呢?
答:3017:000A、3015:002A和3010:007A的存储单元的物理地址都是
3017AH。
30020H 30021H 30022H 30023H 30024H 12H 34H ABH CDH EFH
2.6 在实模式下,存储器中每一段最多可有10000H个字节。如果用调试程序
DEBUG的r命令在终端上显示出当前各寄存器的内容如下,请画出此时
2.3题的信息存放情况 存储器分段的示意图,以及条件标志OF、SF、ZF、CF的值。 10E40 10F40 数据段 C>debug
20E40 -r 附加段 20F40
AX=0000 BX=0000 CX=0079 DX=0000 SP=FFEE BP=0000
21F00 SI=0000 DI=0000 DS=10E4 ES=10F4 SS=21F0 CS=31FF
堆栈段 IP=0100 NV UP DI PL NZ NA PO NC
31F00
答:此时存储器分段的示意图如右图所示。OF、SF、ZF、CF的值都
31FF0
为0。 代码段
41FF0
3.2 试根据以下要求写出相应的汇编语言指令
(1) 把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器中。 2.6 题的存储器分段示意图 (2) 用寄存器BX和SI的基址变址寻址方式把存储器中的一个字节与AL寄存器的内容相加,并把结果送到AL寄存器中。
(3) 用寄存器BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和(CX)相
加,并把结果送回存储器中。
(4) 用位移量为0524H的直接寻址方式把存储器中的一个字与数2A59H相加,并把结果送回存储单元中。
(5) 把数0B5H与(AL)相加,并把结果送回AL中。 答:(1) ADD DX, BX
(2) ADD AL, [BX][SI] (3) ADD [BX+0B2H], CX
(4) ADD WORD PTR [0524H], 2A59H (5) ADD AL, 0B5H
3.3 写出把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令。要求使用以下几
种寻址方式:
(1) 寄存器间接寻址 (2) 寄存器相对寻址 (3) 基址变址寻址
答:(1) MOV BX, OFFSET BLOCK
ADD BX, (6–1)*2
MOV DX, [BX]
(2) MOV BX, OFFSET BLOCK MOV DX, [BX+(6–1)*2] BLOCK[BX]
(3) MOV BX, OFFSET BLOCK MOV SI, (6–1)*2 MOV DX, [BX][SI]
3.4 现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)=12H,(20101H)=34H,
(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=B7H,(21203H)=65H,试说明下列各条指令执行完后AX寄存器的内容。 (1) MOV AX, 1200H (AX)=1200H (2) MOV AX, BX (AX)=0100H (3) MOV AX, [1200H] (AX)=4C2AH (4) MOV AX, [BX] (AX)=3412H (5) MOV AX, 1100[BX] (AX)=4C2AH (6) MOV AX, [BX][SI] (AX)=7856H (7) MOV AX, 1100[BX][SI] (AX)=65B7H 3.8 假定(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)=0100H,(BP)=0010H,
数据段中变量名VAL的偏移地址为0050H,试指出下列源操作数字段的寻址方式是什么?其物理地址值是多少? (1) MOV AX, 0ABH (2) MOV AX, BX (3) MOV AX, [100H] (4) MOV AX, VAL (5) MOV AX, [BX] (6) MOV AX, ES:[BX] (7) MOV AX, [BP] (8) MOV AX, [SI] (9) MOV AX, [BX+10] (10) MOV AX, VAL[BX] (11) MOV AX, [BX][SI] (12) MOV AX, VAL[BX][SI] 答:(1) 立即方式; 操作数在本条指令中
(2) 寄存器寻址方式; 操作数为 (BX)=0100H (3) 直接寻址方式; PA=20100H (4) 直接寻址方式; PA=20050H (5) BX寄存器间接寻址方式; PA=20100H (6) 附加段BX寄存器间接寻址方式; PA=21100H (7) BP寄存器间接寻址方式; PA=15010H (8) SI寄存器间接寻址方式; PA=200A0H (9) BX寄存器相对寻址方式; PA=20110H (10) BX寄存器相对寻址方式; PA=20150H (11) BX和SI寄存器基址变址寻址方式; PA=201A0H
改为: MOV BX, (6-1)*2 也可 MOV
DX,
(12) BX和SI寄存器相对基址变址寻址方式; PA=201F0H
3.10 在ABLE为数据段中0032单元的符号名,其中存放的内容为1234H,试问以
TABLE 0AH 下两条指令有什么区别?指令执行完后AX寄存器的内容是什么?
00H MOV AX, TABLE
14H LEA AX, TABLE
TABLE+3 00H 答:MOV AX, TABLE是将TABLE单元的内容送到AX,(AX)=1234H
1EH
LEA AX,TABLE是将TABLE单元的有效地址送到AX,(AX)=0032H
00H
3.11执行下列指令后AX寄存器中的内容是什么? 28H
00H TABLE DW 10, 20, 30, 40, 50 ;000AH, 0014H, 001EH, 0028H, 0032H
32H ENTRY DW 3
00H ┇
3.11题的TABLEMOV BX, OFFSET TABLE
存储方式 ADD BX, ENTRY
MOV AX, [BX]
答:(AX)=1E00H (TABLE的存储方式如右图所示) 3.12 下列ASCII码串(包括空格符)依次存储在起始地址为CSTRING的字节单元中:
CSTRING DB ‘BASED ADDRESSING’
请编写指令将字符串中的第1个和第7个字符传送给DX寄存器。 答:MOV DH, CSTRING
MOV DL, CSTRING+7-1 3.25 试用移位指令把十进制数+53和-49分别乘以2。它们应该用什么指令?得到的结果是
什么?如果要除以2呢? 答:MOV AL, 53
SAL AL, 1 ;(AL)=(+53*2)=6AH MOV AL, -49 SAL AL, 1 ;(AL)=(-49*2)=9EH MOV AL, 53 SAR AL, 1 ;(AL)=(53/2)= 1AH MOV AL, -49 SAR AL, 1 ;(AL)=(-49/2)=0E7H 3.26试分析下面的程序段完成什么功能? MOV CL, 04 SHL DX, CL MOV BL, AH SHL AX, CL SHR BL, CL OR DL, BL
答:本程序段将 ((DX),(AX)) 的双字同时左移4位,即将此双字乘以10H (16)。 3.30编写程序段,把字符串STRING中的‘&’字符用空格符代替。
STRING DB ‘The date is FEB&03’ 答:程序段如下:
MOV CX, 18
MOV CLD MOV MOV LEA REPNE JNE DEC MOV NEXT:
AL, ‘&’
DI, SEG STRING ES, DI
DI, STRING SCASB NEXT DI
ES:BYTE PTR [DI], ‘ ’ ┇
;送空格符
3.32 编写一程序段:比较两个5字节的字符串OLDS和NEWS,如果OLDS字符串不同于
NEWS字符串则执行NEW_LESS;否则顺序执行程序。 答:程序段如下:
MOV CX, 5 CLD
MOV DI, SEG OLDS MOV DS, DI MOV ES, DI LEA SI, OLDS LEA DI, NEWS REPE CMPSB JNE NEW_LESS
┇
NEW_LESS: ┇ 3.36 假设X和X+2单元的内容为双精度数p,Y和Y+2单元的内容为双精度数q,(X和Y为低位字)试说明下列程序段做什么工作?
MOV DX, X+2 MOV AX, X ADD AX, X ADC DX, X+2 CMP DX, Y+2 JL L2 JG L1 CMP AX, Y JBE L2
L1: MOV AX, 1
JMP SHORT EXIT
L2: MOV AX, 2 EXIT:INT 20H
答:此程序段判断p*2>q,则使(AX)=1后退出;p*2≤q,则使(AX)=2后退出。 4.1 指出下列指令的错误:
(1) MOV AH, BX ;寄存器类型不匹配 (2) MOV [BX], [SI] ;不能都是存储器操作数 (3) MOV AX, [SI][DI] ;[SI]和[DI]不能一起使用
(4) MOV MYDAT [BX][SI], ES:AX (5) MOV BYTE PTR [BX], 1000 (6) MOV BX, OFFSET MYDAT [SI]
用OFFSET
(7) MOV CS, AX (8) MOV ECX, AX 答:见注释。
;AX寄存器不能使用段超越 ;1000超过了一个字节的范围
;MYDAT [SI]已经是偏移地址,不能再使;CS不能用作目的寄存器 ;两个操作数的数据类型不同
4.7请设置一个数据段DATASG,其中定义以下字符变量或数据变量。
(1) FLD1B为字符串变量:‘personal computer’; (2) FLD2B为十进制数字节变量:32; (3) FLD3B为十六进制数字节变量:20; (4) FLD4B为二进制数字节变量:01011001;
(5) FLD5B为数字的ASCII字符字节变量:32654; (6) FLD6B为10个零的字节变量;
(7) FLD7B为零件名(ASCII码)及其数量(十进制数)的表格:
PART1 20 PART2 50 PART3 14
(8) FLD1W为十六进制数字变量:FFF0; (9) FLD2W为二进制数的字变量:01011001; (10) FLD3W为(7)零件表的地址变量;
(11) FLD4W为包括5个十进制数的字变量:5,6,7,8,9; (12) FLD5W为5个零的字变量;
(13) FLD6W为本段中字数据变量和字节数据变量之间的地址差。 答:DATASG SEGMENT
FLD1B DB ‘personal computer’ FLD2B DB 32 FLD3B DB 20H FLD4B DB 01011001B FLD5B DB ‘32654’ FLD6B DB 10 DUP (0) FLD7B DB ‘PART1’, 20
DB ‘PART2’, 50 DB ‘PART3’, 14
FLD1W DW 0FFF0H FLD2W DW 01011001B FLD3W DW FLD7B FLD4W DW 5, 6, 7, 8, 9 FLD5W DW 5 DUP (0)
FLD6W DW FLD1W-FLD1B
DATASG ENDS 4.9有符号定义语句如下:
BUFF DB 1, 2, 3, ‘123’ EBUFF DB 0
L EQU EBUFF - BUFF 问L的值是多少? 答:L=6。
4.10假设程序中的数据定义如下:
LNAME DB 30 DUP (?) ADDRESS DB 30 DUP (?) CITY DB 15 DUP (?) CODE_LIST DB 1, 7, 8, 3, 2
(1) 用一条MOV指令将LNAME的偏移地址放入AX。
(2) 用一条指令将CODE_LIST的头两个字节的内容放入SI。
(3) 用一条伪操作使CODE_LENGTH的值等于CODE_LIST域的实际长度。 答:(1) MOV AX, OFFSET LNAME
(2) MOV SI, WORD PTR CODE_LIST
(3) CODE_LENGTH EQU $ - CODE_LIST ;此语句必须放在CODE_LIST语
句之后 4.11 写出一个完整的数据段DATA_SEG,它把整数5赋予一个字节,并把整数-1,0,2,5
和4放在10字数组DATA_LIST的头5个单元中。然后,写出完整的代码段,其功能为:把DATA_LIST中头5个数中的最大值和最小值分别存入MAX和MIN单元中。 答:DATA_SEG SEGMENT
NUM DB 5
DATA_LIST DW -1, 0, 2, 5, 4, 5 DUP (?) MAX DW ? MIN DW ? DATA_SEG ENDS
;---------------------------------------------------------------- CODE_SEG SEGMENT MAIN PROC FAR
ASSUME CS: CODE_SEG, DS: DATA_SEG
START: PUSH DS ;设置返回DOS
SUB AX, AX PUSH AX
MOV AX, DATA_SEG ;给DS赋值 MOV DS, AX
;
MOV CX, 4 ;程序段开始 LEA BX, DATA_LIST MOV AX, [BX] MOV MAX, AX MOV MIN, AX
ROUT1: ADD BX, 2
MOV AX, [BX] CMP AX, MAX JNGE ROUT2 MOV MAX, AX
ROUT2: CMP AX, MIN
JNLE ROUT3 MOV MIN, AX
ROUT3: LOOP ROUT1 ;程序段结束
RET
MAIN ENDP CODE_SEG ENDS
;----------------------------------------------------------------
END START
4.17 写一个完整的程序放在代码段C_SEG中,要求把数据段D_SEG中的AUGEND和附加
段E_SEG中的ADDEND相加,并把结果存放在D_SEG 段中的SUM中。其中AUGEND、ADDEND和SUM均为双精度数,AUGEND赋值为99251,ADDEND赋值为 -15962。 答:程序如下:
D_SEG SEGMENT AUGW LABEL WORD AUGEND DD 99251 SUM DD ? D_SEG ENDS ;以上定义数据段 ;---------------------------------------------------------------- E_SEG SEGMENT ADDW LABEL WORD ADDEND DD -15962 E_SEG ENDS ;以上定义附加段 ;---------------------------------------------------------------- C_SEG SEGMENT MAIN PROC FAR
ASSUME CS: C_SEG, DS: D_SEG, ES: E_SEG
START: PUSH DS ;设置返回DOS
SUB AX, AX PUSH AX
MOV AX, D_SEG MOV DS, AX ;给DS赋值 MOV AX, E_SEG MOV ES, AX ;给ES赋值
;
MOV AX, AUGW ;以下6条指令进行加法计算 MOV BX, AUGW+2 ADD AX, ES: ADDW ADC BX, ES: ADDW+2 ;不考虑有符号数溢出 MOV WORD PTR SUM, AX MOV WORD PTR [SUM+2], BX RET
MAIN ENDP
C_SEG ENDS ;以上定义代码段 ;----------------------------------------------------------------
END START
4.19 试说明下述指令中哪些需要加上PTR伪操作符:
BVAL DB 10H,20H WVAL DW 1000H
(1) MOV AL,BVAL ;不需要 (2) MOV DL,[BX] ;不需要 (3) SUB [BX],2 ;需要,如SUB BYTE PTR [BX],2 (4) MOV CL,WVAL ;需要,如MOV CL,BYTE PTR
WVAL
(5) ADD AL,BVAL+1 ;不需要 5.2 编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。 答:程序段如下:
BEGIN: MOV AH, 1 ;从键盘输入一个字符的DOS调用
INT 21H CMP AL, ‘a’ ;输入字符<‘a’吗? JB STOP CMP AL, ‘z’ ;输入字符>‘z’吗? JA STOP DEC AL ;得到前导字符 MOV DL, AL ;准备显示三个字符 MOV CX, 3
DISPLAY: MOV AH, 2 ;显示一个字符的DOS调用
INT 21H INC DL
LOOP DISPLAY
STOP: RET 5.4 试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同则显示‘MATCH’, 若不相同则显示‘NO MATCH’。 答:程序如下:
DSEG SEGMENT
STRING1 DB ‘I am a student.’ STRING2 DB ‘I am a student!’ YES DB ‘MATCH’, 0DH, 0AH, ‘$’ NO DB ‘NO MATCH’, 0DH, 0AH, ‘$’ DSEG ENDS
;-------------------------------------------------------------------------- CSEG SEGMENT MAIN PROC FAR
ASSUME CS: CSEG, DS: DSEG, ES: DSEG
START: PUSH DS ;设置返回DOS
SUB PUSH MOV MOV MOV
;
BEGIN:
AX, AX AX
AX, DSEG DS, AX ES, AX
;给DS赋值
;给ES赋值
LEA SI, STRING1 ;设置串比较指令的初值 LEA DI, STRING2 CLD
MOV CX, STRING2 - STRING1 REPE CMPSB ;串比较 JNE DISPNO LEA DX, YES ;显示MATCH JMP DISPLAY
DISPNO: LEA DX, NO ;显示NO MATCH DISPLAY: MOV AH, 9 ;显示一个字符串的DOS调用
INT 21H RET
MAIN ENDP CSEG ENDS ;以上定义代码段 ;--------------------------------------------------------------------------
END START
5.7 试编写一个汇编语言程序,求出首地址为DATA的100D字数组中的最小偶数,并把它
存放在AX中。 答:程序段如下:
BEGIN: MOV BX, 0
MOV CX, 100
COMPARE: MOV AX, DATA[BX] ;取数组的第一个偶数
ADD BX, 2 TEST AX, 01H ;是偶数吗? LOOPNZ COMPARE ;不是,比较下一个数 JNZ STOP ;没有偶数,退出 JCXZ STOP ;最后一个数是偶数,即为最小偶数,退出
COMPARE1: MOV DX, DATA[BX] ;取数组的下一个偶数
ADD BX, 2 TEST DX, 01H ;是偶数吗? JNZ NEXT ;不是,比较下一个数 CMP AX, DX ;(AX)<(DX)吗? JLE NEXT MOV AX, DX ;(AX)<(DX),则置换(AX)为最小偶数
NEXT: LOOP COMPARE1 STOP: RET 5.9 试编写一个汇编语言程序,要求从键盘接收一个四位的16进制数,并在终端上显示与
它等值的二进制数。 答:程序段如下:
BEGIN: MOV
MOV MOV
INPUT: SHL
MOV INT CMP JB CMP JA AND JMP
AF: AND
CMP JB CMP JA AND ADD
BINARY: OR
DEL JNZ
DISPN: MOV 码显示 DISP: MOV
ROL RCL OR MOV INT LOOP
STOP: RET
BX, 0
CH, 4 CL, 4 BX, CL AH, 1 21H
AL, 30H INPUT AL, 39H AF AL, 0FH BINARY
AL, 1101 1111B AL, 41H INPUT AL, 46H INPUT AL, 0FH AL, 9 BL, AL CH INPUT CX, 16 DL, 0 BX, 1 DL, 1 DL, 30H AH, 2 21H DISP
;用于存放四位的16进制数
;将前面输入的数左移4位 ;从键盘取数
;<0吗?
;不是‘0~F’的数重新输入 ;是‘0~9’吗?
;不是,转‘A~F’的处理 ;转换为:0000B~1001B ;转换为大写字母 ;又
;不是‘A~F’的数重新输入 ;>F吗?
;不是‘A~F’的数重新输入 ;转换为:1010B~1111B ;将键盘输入的数进行组合
;将16位二进制数一位位地转换成ASCII
;进行显示
5.11 从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计
数结果。
答:程序段如下:
DSEG SEGMENT BUFF DB 50 DUP (‘ ’) COUNT DW 0 DSEG ENDS
┇
BEGIN: LEA BX, BUFF
MOV COUNT, 0
INT 21H LOOP SPACE CALL OUTOCT ;调用八进制显示子程序 CALL DISP_CRLF POP BX POP BP RET 2
PAIRS ENDP ;PAIRS子程序结束 ;-------------------------------------------------------------------------- OUTBIN PROC NEAR ;二进制显示子程序
PUSH BX MOV CX, 16
ONEBIT: ROL BX, 1
MOV DX, BX AND DX, 1 OR DL, 30H ;转换为ASCII码 MOV AH, 2 INT 21H LOOP ONEBIT POP BX RET
OUTBIN ENDP ;OUTBIN子程序结束 ;-------------------------------------------------------------------------- OUTOCT PROC NEAR ;八进制显示子程序
ROL BX, 1 ;16位二进制数包含6位八进制数,最高位仅1位 MOV DX, BX AND DX, 1 OR DL, 30H ;转换为ASCII码 MOV AH, 2 INT 21H
MOV CX, 5 ;余下还有5位八进制数
NEXT: PUSH CX
MOV CL, 3 ;1位八进制数包含3位二进制数 ROL BX, CL MOV DX, BX AND DX, 07H OR DL, 30H ;转换为ASCII码 MOV AH, 2 INT 21H POP CX LOOP NEXT RET
OUTOCT ENDP ;OUTOCT子程序结束
;-------------------------------------------------------------------------- DISP_CRLF PROC NEAR ;显示回车换行符子程序
LEA DX, CRLF MOV AH, 09H INT 21H RET
DISP_CRLF ENDP ;DISP_CRLF子程序结束 ;-------------------------------------------------------------------------- CSEG ENDS ;以上定义代码段 ;******************************************
END START
正在阅读:
汇编复习习题答案06-08
二次谐波制动比率差动的原理06-08
现代散文选读教案(二)高品质版03-20
童年的味道作文350字07-06
对不起,您的帐号已被系统禁止发信,请在解禁后再重试!01-27
过小孤山大孤山答案12-08
施工现场引人深思的质量缺陷(实拍图片)04-15
FPGA中同步FIFO的使用小结07-22
新东方大学俄语第一册答案03-12
最新-2019年教师节活动策划方案 精品05-22
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 习题
- 汇编
- 复习
- 答案
- 中级财务会计-第三次作业及答案
- 二次谐波制动比率差动的原理
- 实验一 高频小信号调谐放大器实验.doc
- 经典全面初中政治答题技巧
- 全国教育科学规划课题成果鉴定申请·审批书
- 教育工作述职报告
- 大截面吊车梁制作工艺探讨(修改版)
- 医疗设备维修验收制度
- “智慧城市”建设行动计划 - 图文
- 2018年电大城市管理学形成性考核册答案
- 0415 某市国际海员俱乐部和工人文化宫综合活动大楼工程施工组织
- 电子商务视角下连锁超市市场营销策略以“家乐福”为例
- 区域小学语文学科精英教师团队建设及其雁阵效应
- 大学生公民素质教育题库
- 2012年自主招生安徽录取名单
- 六大宗教基本经典和教义
- 单片机原理及应用及C51程序设计第三章习题答案
- 煤矿掘进队2013年年度工作总结及2014年年度工作计划
- 会展策划师考试参考题
- 胶东调水倒虹工程监理实施细则