南邮 微机原理(微型计算机与接口技术)第3章习题解答
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.6 先将10进制数转换成16进制数 TABLE DW 009EH,0102H,0166H,01CAH
TABLE+0 TABLE+1 TABLE+2 TABLE+3 TABLE+4 TABLE+5 TABLE+6 TABLE+7
9EH 00H 02H 01H 66H 01H CAH 01H
= 6601H
(4)MOV EAX, DWORD PTR BUF CMP EAX,0 ;与0比较 JGE E1 ;大于等于0直接转E1 NEG EAX ;负数求补 MOV DWORD PTR BUF ,EAX E1: HLT 或者写成: CMP DWORD PTR BUF,0 JGE E1 NEG DWORD PTR BUF E1: HLT
AX
3.7 MOV EDX,0 MOV EAX,1193182 MOV EBX, 433 DIV EBX MOV XX,AX 注意:使用双字除法,被除数默认在EDX和EAX中 (EDX为高位),除数在另一个32位寄存器或存 储器中,经除法操作后的商在EAX中,余数在 EDX中。 本题结果为2756,没有超过65536,所以EAX的 高16位=0,而AX中的商即为正确结果。 如果使用字除法,先将被除数转换成16进制数, 然后放到DX和AX中,则商在AX中,余数在DX中。
;移位次数=8 ;含进位的循环左移一位 ;含进位的循环右移一位 ;移位次数有无达到8次 ;有无达到8次,没有转L1 ;将结果传送到AL
3.10 第1小题的框图
ቤተ መጻሕፍቲ ባይዱ
置源数据区指针 置正数缓冲区指针 置负数缓冲区指针 置数据长度
从源缓冲区 取一个数
Y
=0吗?
N
N
是正数吗?
Y
传送到负数缓冲区 传送到正数缓冲区 负数缓冲区指针加1 正数缓冲区指针加1 源数据区指针加1 数据长度减1
(2)
LEA BX,BUF LEA DI, NOT0 MOV CX, 50 S1: MOV AL, [BX] OR AL, AL JZ ZERO MOV [DI],AL INC DI ZERO: INC BX LOOP S1 HLT
;建立标志
(3)LEA BX,BUF MOV CX,50 S1: MOV AL,[BX] OR AL, AL JNS P1 ;是正数直接转移 NEG AL ;是负数求其绝对值 MOV [BX],AL P1: INC BX ;修改地址 LOOP S1 HLT
S1: CMP BYTE PTR [BX],0 ;与0比较 JZ COM ;=0 准备取下一个数判断 JL M1 ;为负数转到M1处理 MOV AL,[BX] ;取数 MOV [SI],AL ;将正数存入PLUS缓冲区 INC SI ;修改正数缓冲区地址指针 JMP COM ;转到长度计数部分 M1: MOV AL,[BX] ;取数 MOV [DI], AL ;将负数存入MINUS缓冲区 INC DI ;修改负数缓冲区地址指针 COM: INC BX ;修改源数据地址指针 LOOP S1 ;数据长度减1,并判断 HLT ;结束
3.8 SHL AH,4 ;左移4位 AND AL,0FH ;屏蔽高4位 OR AH,AL ;完成拼装
AH AL
拼装前 AH
拼装后
3.9
CF D7
AL D0
RCL AL,1 CF D0 BL D7
RCR BL,1 每一位需连续执行两条移位指令,共需执行8次 这样的两条指令。
程序: MOV CL,8 L1:RCL AL,1 RCR BL,1 DEC CL JNZ L1 MOV AL,BL
第3章习题解答
3.5 (1)方法1 MOV AX,WORD PTR FIRST MOV BX,WORD PTR SECOND MOV WORD PTR FIRST,BX MOV WORD PTR SECOND,AX 注意: PTR用于临时修改属性,常用方法是 在存储器操作数之前使用。 例如: WOR PTR FIRST WORD PTR [BX] BYTE PTR [SI+BX]
方法2:使用交换指令 MOV AL,FIRST XCHG AL,SECOND MOV FIRST,AL MOV AL,FIRST+1 XCHG AL,SECOND+1 MOV FIRST+1,AL 注意:XCHG指令的两个操作数只能同为寄 存器,或者寄存器和内存操作数,而不能 同为内存操作数。
(2)PUSH WORD PTR FIRST ;堆栈只能16位操作 PUSH WORD PTR SECOND POP WORD PTR FIRST POP WORD PTR SECOND
3.13 程序
题目要求为:
源数据区(长度1K) 目的数据区(长度1K)
23456H 23457H 12345H 12346H
:
:
增 量 传 送 方 向
12744H
23855H
因为1K=1024=400H 所以源缓冲区最后一个单元地址为: 12345H+400H-1=12744H 同理,目的缓冲区最后一个单元地址为: 23456H+400H-1=23855H
N
数据长度=0?
Y
停机
程序:
(1) DATA SEGMENT BUF DB 50 DUP(?) ;原始数据 PLUS DB 50 DUP(?) ;存放正数 MINUS DB 50 DUP(?) ;存放负数 DATA ENDS 程序: LEA BX, BUF ;数据指针 LEA SI, PLUS ;正数指针 LEA DI, MINUS ;负数指针 MOV CX,50 ;数据长度=50
解:先将物理地址写成逻辑地址 源逻辑地址为 1000H:2345H 目的逻辑地址为 2000H:3456H MOV AX,1000H ;设置DS段寄存器 MOV DS, AX MOV AX, 2000H ;设置ES段寄存器 MOV ES, AX MOV SI, 2345H ;设置源偏移地址 MOV DI, 3456H ;设置目的偏移地址 MOV CX, 1024 ;设置长度值 CLD ;设置地址为增量方向 REP MOVSB ;重复传送指令