微型计算机原理应用第四版答案(3)

2019-02-16 13:18

答:正确

(7)MOV DX, 2000H 答:正确 (8)POP CS

答:不对,段寄存器CS和立即数都不能作目的操作数 (9) PUSH CS 答:正确。

注:本部分可以用DEBUG中的-a指令进行调试以确认指令是否正确

5.5 设堆栈指针SP的初值为2000H,AX=3000H,BX=5000H,试问: (1)执行指令PUSH AX 后 SP=?

答:执行PUSH指令时,栈顶指针SP自动减2,所以SP=2000H-2= 1FFE H; (2)再执行PUSH BX 及POP AX后SP=? AX=? BX=?

答:执行PUSH BX 后SP=1FFE H- 2;再执行POP AX后SP=(1FEE H-2)+2=1FFE H; 此时AX中的内容为原BX中的内容,故AX=5000H; 而BX中的内容没有改动,即还是5000H.

5.6 要想完成把[2000H]送 [1000H]中,用指令:

MOV [1000H], [2000H]是否正确 ?如果不正确,应用什么方法? 答:不正确,因为两个存储单元之间不能直接传送数据。可以改为: MOV AX, [2000H] MOV [1000H], AX

5.7 假如想从100中减去AL中的内容,用SUB 100,AL是否正确?如果不正确,应用什么方法?

答:不正确,因为立即数不能做为目的操作数。可以改为: MOV BL, 5AH ; 100的16进制数表达式为5AH SUB BL, AL

5.8 用两种方法写出从88H端口读入信息的指令。再用两种方法写出从42H口输出100H的指令。

答:法一:IN AL, 88H;

法二:MOV DL, 88H IN AL, DL

(2) 法一:MOV AX, 0100H

OUT 42H, AX; 将AX中的内容输出到42H、43H两端口中,其中00H送42H端口中,

01H送到43H端口中

法二:MOV AX,0100H MOV DX, 42H OUT DX, AX

5.9 假如AL=20H,BL=10H,当执行CMP AL,BL后,问:

(1)若AL、BL中内容是两个无符号数,比较结果如何?影响哪几个标志位? 答:对无符号数,执行CMP后影响 CF、ZF位。

故执行后标志为分别为 ZF=0;CF=0;

(2)若AL、BL中内容是两个有符号数,结果又如何?影响哪几个标志位? 答:对有符号数,执行CMP指令后影响ZF和OF标志位,不影响CF位。 执行后标志位分别为ZF=0;OF=0

第6章习题

6.1.读下面程序段,请问:在什么情况下,本段程序的执行结果是AH=0? BEGIN: IN AL,5FH

TEST AL,80H JZ BRCHl MOV AH,0 JMP STOP BRCHl: MOV AH,0FFH STOP: HLT

解答:AL中的最高位为1时。

6.2.读程序:

START: IN AL,20H MOV BL,AL IN AL,30H MOV CL,AL MOV AX,0 ADLOP: ADD AL,BL ADC AH,0 DEC CL JNZ ADLOP HLT

第一个数AL为: 0002 0000 第二个数BL为:- 0001 0000 0001 0000 请问: (1)本程序实现什么功能? (2)结果在哪里?

解答:完成20H*30H,结果在AX中。

6.3 请编一程序段完成AX*10的任务(要求不准用乘法指令做) 答:MOV BX,AX MOV CL 2

SHL AX, CL ;此句实现了AX=AX*4 ADD AX,BX ;此句使得AX=5AX

SHL AX ,1 ;此句实现了5AX*2=10AX 法二:MOV BX,AX MOV CL, 4 SHL AX,CL SHL BX,1 ADD AX,BX

6.4.编程序使:

(1)AX寄存器低4位清零。 (2)BX寄存器低4位置“1”。 (3)CX寄存器低4位变反。

(4)用TEST指令测试DL寄存器位3、位6是否同时为0,若是,将0送DL;否则l送DH。

解答 :(1) AND AX ,0FFF0H (2) OR BX ,000FH (3) XOR CX ,000FH 或者NOT CX(但这样CX的高4位也会变反) (4)TEST DL ,48H JZ LOOP MOV DH,1 HLT LOOP :MOV DL ,0

HLT

6.5.编一程序段,完成符号函数(-128≤x≤127):

1 (x>0)

y= 0 (x=0) -1 (x<0)

假设x的值存放在DATAl中,y的值存放在DATA2中。 解答: START :MOV AL ,DATA1 AND AL,AL JGE BIGR MOV AL,81H ;即将-1给AL MOV DATA2,AL HLT

BIGR: JE EQUL ;结果为0,转EQUL MOV AL,1 MOV DATA2,AL HLT EQUL: MOV AL,O

MOV DATA2,AL

HLT

6.6.设AX寄存器中有一个16位二进制数,编一程序,统计AX中“l”的个数,统计结果送CX中。

解答: START : MOV CX ,0 ;CX清零也可用XOR CX,CX实现 LOOP1: CLC ;CF清零

SUB AX,0 ;此句也可用CMP AX,O替代

JZ STP

SAL AX,1 ;此句也可用SHL AX,1替代 JNC NOD INC CX NOD: JMP LOOP1 STP: HLT

6.7.编一子程序利用XLAT指令把十六进制数转换成ASCII码。假设ASCII码存放在以 DAT1为首地址的数据区中,对应的16进制数放在以DAT2为首地址的数据区中,转换结果送以DAT3为首地址的数据区中。 解答: SUBPROC PROC

SUBPROC :PUSH BX PUSH SI

PUSH DI PUSH CX PUSH AL PUSH DS

START: MOV BX,DATA1 ;将首地址DAT1送到BX中,作为表的首地址 MOV SI ,DAT2 MOV DI DAT3 MOV CX ,16 NEST: LODSB ;读字节串,从地址为SI的RAM读16进制数到AX/AL XLAT ;用换码指令XLAT将AX/AL中的16进制数转换成

;对应的ASCII码

STOSB ;写字节串,从AX/AL写到RAM,即将转换成的ASCII码送

;到目标地址DI处

LOOP NEST ;CX!=0,就转向NEST,SI与DI都会自动增1 POP DS POP AL POP CX POP DI POP SI POP BX RET SUBPROC ENDP

本题重点:(1)所有的串操作指令,如LODSB, STOSB等都用寄存器SI对源操作数进行间接寻址;都用寄存器DI为目的操作数进行间接寻址。 (2)在每次循环后,地址指针SI和DI都会受到修改;

(3)XLAT指令的用法,见教材P118,用BX给定首地址,用AL/AX给定偏移地址,再用XLAT指令转换。

第7章习题

7.2 假设学生某门课程的成绩放在数据区中,请编一程序,统计该成绩中小于60分的人数,60~90分的人数,大于90分的人数,并显示在屏幕上。 答:分析:假设学生成绩放在以DATA1为首地址的数据区中。

DATASEG SEGMENT

DATA1 DB 100 DUP (?)

STRING1 DB ’The student number of grade is bigger than 90’ STRING2 DB ‘The student number of grade is between 60 and 90’ STRING3 DB ’The student number of grade is less than 90’

DATASEG ENDS

SS1 SEGEMENT STACK

DW 30 DUP(?)

SS1 ENDS CODE SEGMENT

ASSUME CS: CODE, DS:DATASEG, SS:SS1 START: MOV AX, DATASEG

MOV DS, AX

MOV SI, OFFSET DATA1

MOV CL, 100(D); 将学生人数100赋给CL XOR BX, BX XOR AX, AX XOR DX, DX CMP AX, 90(D) JA L1 CMP AX, 60(D) JAE L2

INC CH ;用CH保存小于60的人数 JUMP A2 JUMP A2 JUMP A2 LOOP A1

A1: MOV AX, [SI]

L1: INC BH ;用BH保存大于90的人数 L1: INC BL ;用BL保存60到90的人数 A2: INC SI

;----------------在屏幕上输出各类人数

MOV DX, OFFSET STRING1


微型计算机原理应用第四版答案(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:最全面最专业的网站建设招标书

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: