当前位置:文档之家› 微机原理与接口第二版(陈红卫版)参考答案及复习纲要

微机原理与接口第二版(陈红卫版)参考答案及复习纲要

第一章

1.将下列十进制数转换成二进制数。

(1)49 (2)49.75 (3)100 (4)100.8125

解:(1)(49)10=(110001)2

(2)(49.75)10=(110001.11)2

(3)(100)10=(1100100)2

(4)(100.8125)10=(1100100.1101)2

2.将下列十六进制数转换成二进制数和十进制数。

(1)FAH (2)78A2H (3)FFFFH (4)3CH

解:(1)(FA)16=(11111010)2=(250)10

(2)(78A2)16=(111100010100010)2=(30882)10

(3)(FFFF)16=(1111111111111111)2=(65535)10

(4)(3C)16=(111100)2=(60)10

3.将下列二进制数转换成十六进制数和八进制数。

(1)101101.11 (2)1111111 (3)1101001011.01 (4)10111101

解:(1)(101101.11)2=(2D.C)16=(55.6)8

(2)(1111111)2=(7F)16=(177)8

(3)(1101001011.01)2=(34B.4)16=(1513.2)8

(4)(10111101)2=(BD)16=(275)8

4.设机器字长为8位,写出下列各二进制数的原码、反码和补码。

(1)+1010101 (2)-1000000 (3)+1111111 (4)-1111111

解:(1)原码:01010101;反码:01010101;补码:01010101。

(2)原码:11000000;反码:10111111;补码:11000000。

(3)原码:01111111;反码:01111111;补码:01111111。

(4)原码:11111111;反码:10000000;补码:10000001。

5.设下列四组为8位二进制补码表示的十六进制数,计算a+b和a-b,并判断其结果是否溢出。

(1)a=0F6H,b=0D5H (2)a=0B7H,b=0C7H

(3)a=37H,b=67H (4)a=73H,b=7BH

解:(1)a+b=CBH,没有发生溢出;a-b=21H,没有发生溢出。

(2)a+b=7EH,发生溢出;a-b=F0H,没有发生溢出。

(3)a+b=9EH,发生溢出;a-b=D0H,没有发生溢出。

(4)a+b=EEH,发生溢出;a-b=F8H,没有发生溢出。

6.已知a=00111000B,b=11110011B,计算下列逻辑运算。

(1)a AND b (2)a OR b (3)a XOR b (4)NOT a

解:(1)a AND b=00110000B

(2)a OR b=11111011B

(3)a XOR b=11001011B

(4)NOT a=11000111B

7.将下列算式中的十进制数表示成组合BCD码进行运算,并根据需要进行调整。

(1)38+42 (2)56+77 (3)99+77 (4)34+7

解:(1)00111000

+ 01000010

01111010

+ 0110

10000000(80)

(2)01010110

+ 01110111

11001101

+ 01100110

000100110011(133)

(3)10011001

+ 01110111

100010000

+ 01100110

000101110110(176)

(4)00110111

+ 00000111

00111011

+ 0110

01000001(41)

8.将下列字符串表示成相应的ASCII码(用十六进制数表示)。

(1)102 (2)ABC (3)ASCII (4)abc

解:(1)313032H

(2)414243H

(3)4153434949H

(4)616263H

9.已知[X]原=10101100B,计算[(1/2)X]补及[(-1/2)X]补的值。

解:∵[X]原=10101100B ∴[(1/2)X]原=10010110B,[(-1/2)X]原=00010110B

∴[(1/2)X]补=11101010B,[(-1/2)X]补=00010110B

10.请将十进制数7.5表示成二进制浮点规格化数(阶符1位,阶码2位,数符1位,尾数4位)。

解:十进制数7.5用二进制表示为:111.1B

111.1B=0.1111×2+3

浮点规格化数表示成:01101111。

第二章

1.8086/8088微处理器从逻辑结构上可以分成哪两部分?试说明每一部分的组成与功能。

答:8086/8088微处理器从逻辑结构上可以分成执行单元(EU)和总线接口单元(BIU)。

执行部件(EU)包含一个16位的算术逻辑单元(ALU)、一个16位反映CPU状态和控制标志的状态标志寄存器(FLAG)、一组8个16位通用寄存器组、数据暂存寄存器和EU的控制电路。总线接口部件(BIU)包含一组段寄存器(CS,SS,DS和ES)、一个指令指针寄存器(IP)、4或6个字节的指令队列、地址形成器件和总线控制逻辑。

EU的功能是负责指令的执行;BIU的功能是根据EU的请求,完成CPU与存储器或I/O 接口间的数据传送。

2.写出8086/8088 CPU中14个16位寄存器的名称。

答:8086/8088 CPU中14个16位寄存器的名称如下:

AX:累加器。

BX:基址寄存器。

CX:计数寄存器。

DX:数据寄存器。

SP:堆栈指针寄存器。

BP:基地址指针寄存器。

SI:源变址寄存器。

DI:目的变址寄存器。

CS:代码段寄存器。

DS:数据段寄存器。

SS:堆栈段寄存器。

ES:附加段寄存器。

IP:指令指针寄存器。

FLAG:标志寄存器。

3.写出8086/8088 CPU标志寄存器中的6个状态标志位和3个控制标志位的定义。

答:6个状态标志位的定义如下:

CF:进位标志;当最高位有进位或借位时,CF=1;否则CF=0;

PF:奇偶标志;当运算结果中低8位中“1”的个数为偶数时,PF=1;否则PF=0;

AF:辅助进行标志;当D3向D4有进位或借位时,AF=1;否则AF=0;

ZF:零标志;运算结果每位都为0时,ZF=1;否则ZF=0;

SF:符号标志;运算结果的最高位为1时,SF=1;否则SF=0;

OF:溢出标志;两个符号数进行运算产生溢出时,OF=1;否则OF=0。

3个控制标志位的定义如下:

TF:陷阱标志;当TF=1时,CPU将进入单步执行工作方式;

IF:中断标志;当IF=1时允许CPU响应可屏蔽中断;当IF=0时禁止CPU响应可屏蔽中断;

DF:方向标志;当DF=0时,串操作指令时地址朝增加方向;当DF=1时,串操作指令时地址朝减少方向。

4.在8086/8088 CPU中,十六进制补码数8070H与9E85H进行加法运算,请写出运算结束后SF、OF、CF、AF、ZF及PF标志位的值?

解:8070H 1000000001110000

+ 9E85H 1001111010000101

128F5H +10010100011110101

从运算结果可以看出:SF=0;OF=1;AF=0;CF=1;ZF=0;PF=1。

5.写出8086/8088 CPU 引脚中ALE 、NMI 、INTR 、INTA 及R DT/的含义及输入/输出方向。

答:ALE :地址锁存输出信号。

NMI :非屏蔽中断请求输入信号。

INTR :可屏蔽中断请求输入信号。

INTA :中断响应输出信号。

R DT/:数据传送方向输出信号。

6.8088 CPU 中的RESET 、READY 信号的作用分别是什么?

答:RESET :CPU 复位输入信号,高电平有效。当此输入线有效并维持至少4个时钟周期时完成CPU 内部复位操作。复位后CPU 内的寄存器及引脚处于初始状态。

READY :准备就绪输入信号,高电平有效。用于协调CPU 与存储器或I/O 端口之间的数据传送。当CPU 对存储器或I/O 进行操作时,在T 3周期开始采样READY 信号。若其为低电平,表明被访问的存储器或I/O 还未准备就绪;若其为高电平,表明被访问的存储器或I/O 已准备就绪。

7.写出段基址、偏移地址、逻辑地址和物理地址的含义,同时写出它们之间的联系。 答:段基址:段首地址的高16位地址码,常存于相应的段寄存器中;

偏移地址:段内的相对地址,也称有效地址;

逻辑地址:由段基址与段内偏移地址组合表示存储单元地址;

物理地址:用20位二进制编号表示存储单元地址;

物理地址=段基址×16+段内偏移地址。

8.试填写物理地址。

(1)CS=1200H ,IP=2500H ,物理地址为 14500H 。

(2)DS=39A0H ,BX=4700H ,物理地址为 3E100H 。

(3)ES=6200H ,DI=2000H ,物理地址为 64000H 。

(4)SS=8200H ,BP=1050H ,物理地址为 83050H 。

9.请画出8088 CPU 一个基本的存储器写总线周期时序图。

答:

一个总线周期

CLK T1 T2 T3

T4 A

19 ~A 16/S 6~S

3

地址输出 状态输出

A 15~A 8 地址输出

AD 7~AD 0 地址输出 数据输出 ALE

IO/M WR

DT/R

DEN

10.请写出时钟周期、总线周期与指令周期的含义。

答:时钟周期是CPU 的基本时间计量单位,即计算机主频的倒数。

总线周期是指CPU 通过总线对存储器或I/O 端口进行一次访问(读/写操作)所需的时间;一个总线周期至少包含4个时钟周期,即T 1、T 2、T 3、T 4。

指令周期是指计算机完成一条指令的执行所需要的时间。

11.在总线周期的T 1、T 2、T 3和T 4状态,CPU 分别执行什么动作?什么情况下需要插入等待状态T W ?T W 插入的位置?

答:在T 1状态,BIU 把要访问的存储器单元或I/O 端口的地址输出到总线。

在T 2状态,地址/数据复用总线停止输出地址信号。若是读周期,T 2中地址/数据复用总线处于高阻状态,CPU 有足够的时间使其从输出方式变为输入方式;若为写周期,CPU 不必转变输出方式。

在T 3~T 4状态,CPU 与存储器或I/O 接口进行数据传送。CPU 若与慢速的存储器或I/O 端口之间的数据传送,READY 信号在T 3状态时仍为低电平,则在T 3之后插入等待状态T W ,加入T W 的个数由外设的速度与CPU 速度匹配决定。

12.8088 CPU 工作在最小模式下,请回答以下问题:

(1)CPU 访问存储器时,需要哪些信号?

(2)CPU 访问I/O 接口时,需要哪些信号?

(3)当HOLD 有效并得到响应时,CPU 的哪些信号置高阻状态?

答:(1)利用A 15~ A 8,AD 7~AD 0,ALE ,WR ,RD ,R DT/,DEN ,M IO/。

(2)利用A 15~ A 8,AD 7~AD 0,ALE ,WR ,RD ,R DT/,DEN ,M IO/。

(3)当HOLD 有效并得到响应时,CPU 中呈高阻状态的信号有:A 15~ A 8,AD 7~AD 0,ALE ,WR ,RD ,R DT/,DEN ,M IO/。

第三章

1.按照题目中提出的要求,写出能达到要求的一条(或几条)汇编形式的指令。(1)将立即数1234H送入寄存器BX;

(2)将立即数1234H送入段寄存器DS;

(3)将变址寄存器DI的内容送入数据段中2000H的存储单元;

(4)把数据段中2000H存储单元的内容送段寄存器ES;

(5)将立即数0ABH与AL相加,结果送回AL;

(6)把BX与CX寄存器内容相加,结果送入BX;

(7)寄存器BX中的低4位内容保持不变,其它位按位取反,结果仍在BX中;(8)实现AX与8位数-128的乘积运算;

(9)实现CX中高、低8位内容的交换;

(10)将DX中D0、D5、D8位置1,其余位保持不变。

解:(1)MOV BX, 1234H

(2)MOV AX, 1234H

MOV DS, AX

(3)MOV [2000H], DI

(4)MOV ES,[2000H]

(5)ADD AL,0ABH

(6)ADD BX,CX

(7)XOR BX,0FFF0H

(8)MOV BL,80H

IMUL BL

(9)XCHG CH,CL

(10)OR DX,0121H

2.顺序执行下列指令,填写指令后的空格。

MOV AX,2000H ;AH= 20H

MOV DS,AX ;AL= 00H ;DS= 2000H

MOV BX,2030H ;BH= 20H ;BL= 30H

MOV SI,BX ;SI= 2030H

PUSH BX

POP CX ;BX= 2030H ;CX= 2030H XCHG AX,SI ;AX= 2030H ;SI= 2000H

ADD AX,0F43H ;AX= 2F73H ;CF= 0

CWD ;AX= 2F73H ;DX= 0000H SHL AL,CL ;AL= 00H ;CL= 30H

OR AX,5555H ;AX= 7F55H

AND AX,0AA55H ;AX= 2A55H

MOV BL,0FFH

MUL BL ;AX= 54ABH

IMUL BL ;AX= 0055H

3.指出下列各条指令中源操作数字段的寻址方式。

(1)MOV AX,0ABH ;立即寻址方式

(2)MOV AX,BX ;寄存器寻址方式

(3)MOV AX,[1234H];直接寻址方式

(4)MOV AX,[BX];寄存器间接寻址方式

(5)MOV AX,[BX+10];寄存器相对寻址方式

(6)MOV AX,[BX][SI];基址变址寻址方式

(7)MOV AX,03H[BX][SI];相对基址变址寻址方式

(8)ADD BX,[SI] ;寄存器间接寻址方式

(9)AND AX,1234H ;立即寻址方式

(10)XOR CX,AX ;寄存器寻址方式

4.如果TABEL为数据段中0032H单元的符号名,其中存放的内容为1234H,填写下列指令执行后空格中的内容。

MOV AX,TABEL ;AX= 1234H

LEA AX,TABEL ;AX= 0032H

5.画出执行下列指令过程中堆栈区和SP的内容变化过程示意图,并标出存储单元的物理地址。

MOV AX,1000H

MOV SS,AX

MOV SP,0100H;①

MOV BX,SP

PUSH AX ;②

PUSH BX ;③

POP CX ;④

HLT

解:

6.标出下列指令的执行顺序。(1)MOV AX,1234H (2)CMP AX,8234H (3)JC NEXT1

(4)CBW

(5)NEXT1:MOV BX,9876H (6)CMP BX,AX (7)JB NEXT2

(8)SHR AX,1 (9)NEXT2:AND BX,1010H 10100H 100FEH 100FCH

(10)HLT

解:指令的执行顺序:

(1)→(2)→(3)→(5)→(6)→(7)→(8)→(9)→(10)。

7.指令REP MOVSB,REP LODSB,REP STOSB及REPE SCASB中,哪一条能替代以下程序段。

ABC:MOV AL,[SI]

MOV ES:[DI],AL

INC SI

INC DI

LOOP ABC

解:指令REP MOVSB能替代上述程序段。

8.顺序执行下列各条指令,填写空格。

MOV BX,6534H ;BX= 6534H

XOR BX,0FFFFH ;BX= 9ACBH

AND BX,15A0H ;BX= 1080H

OR BX,2379H ;BX= 33F9H

TEST BX,0002H ;BX= 33F9H

9.试写出执行下列3条指令后BX寄存器的内容。

MOV CL,21H

MOV BX,6D16H

SHR BX,CL

解:BX=0000H

10.试分析以下程序段所完成的功能。

MOV CL,04

SHL DX,CL

MOV BL,AH

SHL AX,CL

SHR BL,CL

OR DL,BL

解:程序段完成由DX和AX共同组成的32位数向左移动4位。

11.假定AX和BX中内容为有符号数,CX和DX中的内容为无符号数,请用比较指令和条件转移指令实现以下判断:

(1)若DX的内容超过CX的内容,则转去执行EXCEED;

(2)若BX的内容大于AX的内容,则转去执行EXCEED;

(3)BX的内容大于等于AX的内容,则转去执行EXCEED;

(4)若CX的内容等于0,则转去执行ZERO;

(5)若BX与AX的内容相等,则转去执行EQ;

(6)若BX的内容小于等于AX的内容,则转去执行EQSMA;

(7)若CX的内容等于5678H,则转去执行EQ;

(8)若DX的内容低于CX的内容,则转去执行EQSM;

(9)若AX的内容为正,则转去执行ABC;

(10)若AX的内容为负,则转去执行ABC1。

解:(1)CMP DX,CX

JA EXCEED

(2)CMP BX, AX

JG EXCEED

(3)CMP BX,AX

JGE EXCEED

(4)CMP CX,0

JZ ZERO

(5)CMP BX,AX

JZ EQ

(6)CMP BX,AX

JLE EQSMA

(7)CMP CX,5678H

JZ EQ

(8)CMP DX,CX

JB EQSM

(9)ADD AX,0

JNS ABC

(10)ADD AX,0

JS ABC1

12.编写程序段,实现十六进制数12345678H与76543210H相减运算,运算结果存入DX、AX中,其中DX存放高位。

解:参考程序段如下:

MOV AX,5678H

SUB AX,3210H

MOV DX,1234H

SBB DX,7654H

HLT

13.编写程序段,实现十进制数12345678与76543210相加运算,运算结果用BCD码表示,并存入DX、AX中,其中DX存放高位。

解:MOV AL,78H

ADD AL,10H

DAA

MOV BL,AL

MOV AL,56H

ADC AL,32H

DAA

MOV AH,AL

MOV AL,34H

ADC AL,54H

DAA

MOV DL,AL

MOV AL,12H

ADC AL,76H

DAA

MOV DH,AL

MOV AL,BL

HLT

14.编写程序段,将附加段中1000H单元开始的100字节单元清零。

解:参考程序段如下:

MOV CX,0064H

MOV DI,1000H

CLD

MOV AL,00H

REP STOSB

HLT

15.编写程序段,将数据段中1000H单元开始的100字节单元均存放23H。解:参考程序段如下:

MOV CX,0064H

MOV AX,DS

MOV ES,AX

MOV DI,1000H

CLD

MOV AL,23H

REP STOSB

HLT

第四章汇编语言源程序设计

1.画出数据段汇编后相应存储单元中的内容并标出存储单元的逻辑地址。DATA SEGMENT

ORG 0100H

ABC0 EQU 78H

ABC DB 09H,-2,45H, 2 DUP(01H,?),‘AB’

ABC1 DW -2, 34H+ABC0,$

ABC2 DD 12H

ABC3 DW ABC

DATA ENDS

解:

DS:0100H ABC→

DS:0101H

DS:0102H

DS:0103H

DS:0104H

DS:0105H

DS:0106H

DS:0107H

DS:0108H

DS:0109H ABC1→

DS:010AH

DS:010BH

DS:010CH

DS:010DH

DS:010EH

DS:010FH ABC2→

DS:0110H

DS:0111H

DS:0112H

DS:0113H ABC3→

DS:0114H

2.设程序中的数据定义如下:

PARTNO DW ?

PNAME DB 16 DUP(?)

COUNT DD ?

PLENTH EQU $-PARTNO

问PLENTH的值为多少?它的含义是什么?

解:PLENTH的值为22(16H)。表示当前位置与PARTNO之间有22个字节空间。3.假设程序中的数据定义如下:

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 CODE_LIST

(3)CODE_LENGTH EQU $-CODE_LIST

4.执行下列程序段后,AX、BX的内容各是什么?

MOV AX,0001H

MOV BX,8000H

NEG AX

MOV CX,4

AA:SHL AX,1

RCL BX,1

LOOP AA

HLT

解:AX=0FFF0H,BX=000FH

5.阅读以下程序,回答问题

DATA SEGMENT

ABC DB 90H,12H,43H,56H,04H,01H

COUNT EQU $-ABC

RESULT DW ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:PUSH DS

MOV AX,DATA

MOV DS,AX

XOR AX,AX

MOV CX,COUNT

LEA SI,ABC

LEA DI,RESULT

AA:MOV BL,[SI]

INC SI

CMP BL,80H

JC NEXT1

NEG BL

NEXT1:ADD AL,BL

ADC AH,00H

LOOP AA

MOV [DI],AX

MOV AH,4CH

INT 21H

CODE ENDS

END START

(1)程序完成什么功能?

(2)程序中NEG BL指令的作用是什么?

(3)程序执行结束后RESULT字单元的内容是什么?

(4)能否用MOV SI,OFFSET ABC代替程序中LEA SI,ABC指令?(5)汇编结束后符号COUNT的值是什么?

解:(1)程序完成求一组有符号字节数的绝对值之和。

(2)程序中NEG BL指令的作用是求负数的绝对值。

(3)程序执行结束后RESULT字单元的内容是0120H。

(4)能。

(5)汇编结束后符号COUNT的值是06H。

6.阅读以下程序,回答问题

DSEG SEGMENT

ARRAY DB 34H,56H,23H,70H,96H

COUNT EQU $-ARRAY

DSEG ENDS

SSEG SEGMENT PARA STACK ‘STACK’

DB 256 DUP(0)

SSEG ENDS

CSEG SEGMENT

ASSUME CS:CSEG,DS:DSEG,SS:SSEG

START:MOV AX,DSEG

MOV DS,AX

MOV SI,OFFSET ARRAY

MOV CX,COUNT

CLD

NEXT: LODSB

MOV BL,AL

AND AL,0F0H

PUSH CX

MOV CL,4

SHR AL,CL

OR AL,30H

CALL DISP

MOV AL,BL

AND AL,0FH

OR AL,30H

CALL DISP

DEC CX

JCXZ DONE

MOV AL,2CH ;逗号的ASCII码为2CH

CALL DISP JMP NEXT

DONE:MOV AH,4CH ;终止当前进程,返回调用进程

INT 21H

DISP PROC NEAR

MOV AH,14 ;写字符到当前光标位置,光标前进一格 INT 10H RET

DISP ENDP

CSEG ENDS END START

(1)程序执行结束后,屏幕上显示的内容是什么?

(2)程序中带下划线的指令可以用什么指令替代(仅一条)?

(3)程序中空格处应填入什么指令,才能保证程序按要求正常执行? 解:(1)程序执行结束后,屏幕上显示的内容是34,56,23,70,96。 (2)程序中带下划线的指令可以用LEA SI ,ARRAY 指令替代。

(3)程序中空格处应填入POP CX 指令,才能保证程序按要求正常执行。

7.AX 寄存器中存有4位压缩BCD 码,试编写程序将这4位数字分开,并分别存入BH 、BL 、CH 和CL 寄存器中。

解: 参考程序段如下:

……

MOV DX,AX MOV CL,04H ROL AX,CL AND DX,0F0FH MOV BL,DH MOV CL,DL AND AX,0F0FH MOV BH,AL MOV CH,AH

……

8.已知X 、Y 是字节型的无符号整数,编写程序计算⎩

⎨⎧<≤-<≤=)3020(,15)

200(,8/X X X X Y 。

解:参考程序如下:

DATA SEGMENT

X DB ? ;运行程序时取X 分别位于两个分支 Y DB ? DATA ENDS

CODE SEGMENT

ASSUME CS:CODE ,DS:DATA

START:MOV AX ,DATA

MOV DS ,AX MOV AL ,X

CMP AL,20

JNC NEXT

MOV CL,03H

SHR AL,CL

JMP NEXT1

NEXT:SUB AL,15

NEXT1:MOV Y,AL

MOV AH,4CH

INT 21H

CODE ENDS

END START

9.编写程序,统计寄存器BX中二进制位“1”的个数,结果存在AL中。

解:参考程序如下:

CODE SEGMENT

ASSUME CS:CODE

START: MOV AL,00H

MOV DX,BX

MOV CX,16

AA: CMP DX,0

JZ NEXT

SHL DX,1

JNC NEXT1

INC AL

NEXT1: LOOP AA

NEXT: MOV AH,4CH

INT 21H

CODE ENDS

END START

10.编写程序段将计算机日期设置为2009年10月1日。

解:参考程序段如下:

MOV CX,2009H ;设置年

MOV DH,10H ;设置月

MOV DL,01H ;设置日

MOV AH,2BH

INT 21H

HLT

11.编写程序实现接收一个字符的输入,并在屏幕上用二进制形式(0/1)显示出它的ASCII码值。

解:参考程序如下:

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AH,01H ;键盘输入

INT 21H

MOV BL,AL

MOV CX,0007H

SHL BL,1

AA:SHL BL,1

JC NEXT1

MOV DL,’0’

JMP NEXT

NEXT1:MOV DL,’1’

NEXT: MOV AH,02H ;显示输出7位ASCII码值

INT 21H

LOOP AA

MOV AH,4CH

INT 21H

CODE ENDS

END START

12.设数据块存放在BUFFER开始的50个字节单元中,试编写程序统计数据块中正数(不包括0)的个数,并将统计的结果存放到NUMBER单元中。

解:参考程序如下:

DATA SEGMENT

BUFFER DB 23H,00H,56H,89H,09H,30H

DB 98H,11H,07H,…

COUNT EQU $-BUFFER

NUMBER DB 00H

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:MOV AX,DATA

MOV DS,AX

MOV CX,COUNT

LEA SI,BUFFER

AA:MOV AL,[SI]

CMP AL,00H

JZ NEXT

JS NEXT

INC NUMBER

NEXT:INC SI

LOOP AA

MOV AH,4CH

INT 21H

CODE ENDS

END START

13.内存的一个区域中有100个字符是用小写字母表示的,试编写一个程序,把它们转换成大写字母,并送屏幕显示。

解:参考程序如下:

DATA SEGMENT

ABC DB 61H,65H,62H,63H,…;(100个小写字母)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:MOV AX,DATA

MOV DS,AX

MOV CX,0064H

LEA SI,ABC

AA:MOV DL,[SI]

SUB DL,20H

MOV [SI],DL

MOV AH,02H

INT 21H

INC SI

LOOP AA

MOV AH,4CH

INT 21H

CODE ENDS

END START

14.“9876”是将输入数据字符“3268”通过密码表“3589027164”加密而得,编写解密程序,求任意输入四位密码的原码。

解:参考程序如下:

DATA SEGMENT

ABC DB 33H,35H,38H,39H,30H

DB 32H,37H,31H,36H,34H

ABC1 DB 4DUP(00H)

ABC2 DB 00H

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

LEA SI,ABC1

LEA DI,ABC2

MOV CX,0004H

AA: MOV AH,01H

INT 21H

MOV [SI],AL

INC SI

LOOP AA

LEA SI,ABC1

MOV DX,0000H

MOV CX,0004H

AA0: LEA BX,ABC

AA1: MOV AL,[SI]

CMP AL,[BX]

JZ NEXT

INC BX

INC DL

JMP AA1

NEXT:PUSH CX

CMP CX,01H

JZ NEXT1

MOV CL,04H

SHL DX,CL

NEXT1:POP CX

LOOP AA0

MOV [DI],AX

MOV AH,4CH

INT 21H

CODE ENDS

END START

15.在STRING单元开始存放着一字符串,字符串以“$”结束,试编制一程序测试该字符串中是否有数字0~9,如有则将CL中的第5位置1,否则将该位清0。

解:参考程序如下:

DATA SEGMENT

ABC DB ‘ABCDS9KL$’

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:MOV AX,DATA

MOV DS,AX

LEA SI,ABC

MOV CL,00H

AA: MOV AL,[SI]

CMP AL,’$’

JZ NEXT1

CMP AL,30H

JC NEXT

CMP AL,3AH

JNC NEXT

OR CL,20H

JMP NEXT1

NEXT: INC SI

JMP AA

NEXT1: MOV AH,4CH

INT 21H

CODE ENDS

16.编写程序完成把DX中的16进制数转换为ASCII码,并将对应的ASCII码依次存入MEM开始的存储单元中。例如,当DX的内容为2A49H时,程序执行结束后,MEM单元开始的4个字节的内容依次为39H,34H,41H,32H。

解:DATA SEGMENT

MEM DB 4 DUP(?)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

MOV CH,04H

MOV BX,OFFSET MEM

MOV CL,04H

AA1:MOV AX,DX

AND AL,0FH

ADD AL,30H

CMP AL,3AH

JC NEXT

ADD AL,07H

NEXT:MOV [BX],AL

INC BX

ROR DX,CL

DEC CH

JNZ AA1

MOV AH,4CH

INT 21H

CODE ENDS

END START

17.现有一个以“$”结尾的字符串,编写程序完成剔除字符串中的空格字符。

解:参考程序如下:

DATA SEGMENT

ABC DB ‘ABC DS9KL$’

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:MOV AX,DATA

MOV DS,AX

LEA SI,ABC

MOV BX,SI

AA: MOV AL,[SI]

CMP AL,’$’

JZ NEXT

CMP AL,20H ;空格的ASCII码值为20H

MOV AL,[SI]

MOV [BX],AL

INC SI

INC BX

JMP AA

NEXT1:INC SI

JMP AA

NEXT: MOV AH,4CH

INT 21H

CODE ENDS

END START

18.编一程序,在STRING开头的数据区中查找WE字符串,数据区以$符作为结束符号。如查到,给出HAVE FOUND提示;如查不到,给出NOT FOUND提示。

解:参考程序如下:

DATA SEGMENT

STRING DB ‘ABCWE5$’

RE DB ‘NOT FOUND$’

RE1 DB ‘HAVE FOUND$’

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

BEGIN:MOV AX,DATA

MOV DS,AX

LEA SI,STRING

AA: MOV AL,[SI]

CMP AL,’$’

JZ NEXT

CMP AL,’W’

JNZ NEXT1

INC SI

MOV AL,[SI]

CMP AL,’E’

JNZ AA

LEA DX,RE1

JMP NEXT2

NEXT1:INC SI

JMP AA

NEXT:LEA DX,RE

NEXT2:MOV AH,09H

INT 21H

MOV AH,4CH

INT 21H

微机原理与接口第二版(陈红卫版)参考答案及复习纲要

第一章 1.将下列十进制数转换成二进制数。 (1)49 (2)49.75 (3)100 (4)100.8125 解:(1)(49)10=(110001)2 (2)(49.75)10=(110001.11)2 (3)(100)10=(1100100)2 (4)(100.8125)10=(1100100.1101)2 2.将下列十六进制数转换成二进制数和十进制数。 (1)FAH (2)78A2H (3)FFFFH (4)3CH 解:(1)(FA)16=(11111010)2=(250)10 (2)(78A2)16=(111100010100010)2=(30882)10 (3)(FFFF)16=(1111111111111111)2=(65535)10 (4)(3C)16=(111100)2=(60)10 3.将下列二进制数转换成十六进制数和八进制数。 (1)101101.11 (2)1111111 (3)1101001011.01 (4)10111101 解:(1)(101101.11)2=(2D.C)16=(55.6)8 (2)(1111111)2=(7F)16=(177)8 (3)(1101001011.01)2=(34B.4)16=(1513.2)8 (4)(10111101)2=(BD)16=(275)8 4.设机器字长为8位,写出下列各二进制数的原码、反码和补码。 (1)+1010101 (2)-1000000 (3)+1111111 (4)-1111111 解:(1)原码:01010101;反码:01010101;补码:01010101。 (2)原码:11000000;反码:10111111;补码:11000000。 (3)原码:01111111;反码:01111111;补码:01111111。 (4)原码:11111111;反码:10000000;补码:10000001。 5.设下列四组为8位二进制补码表示的十六进制数,计算a+b和a-b,并判断其结果是否溢出。 (1)a=0F6H,b=0D5H (2)a=0B7H,b=0C7H (3)a=37H,b=67H (4)a=73H,b=7BH 解:(1)a+b=CBH,没有发生溢出;a-b=21H,没有发生溢出。 (2)a+b=7EH,发生溢出;a-b=F0H,没有发生溢出。 (3)a+b=9EH,发生溢出;a-b=D0H,没有发生溢出。 (4)a+b=EEH,发生溢出;a-b=F8H,没有发生溢出。 6.已知a=00111000B,b=11110011B,计算下列逻辑运算。 (1)a AND b (2)a OR b (3)a XOR b (4)NOT a 解:(1)a AND b=00110000B (2)a OR b=11111011B (3)a XOR b=11001011B (4)NOT a=11000111B 7.将下列算式中的十进制数表示成组合BCD码进行运算,并根据需要进行调整。 (1)38+42 (2)56+77 (3)99+77 (4)34+7 解:(1)00111000 + 01000010 01111010

相关主题
文本预览
相关文档 最新文档