3微机原理与接口技术 习题与课后答案 (雷丽文 著) 电子工业出版社

发布时间:2024-11-06

微机原理习题与答案

第一章微机基础

1-1微处理器、微机与微机系统三者之间有什么不同?

答:微处理器一般也称为CPU,它本身具有运算能力和控制功能。微型计算机是由CPU、存储器、输入/输出接口电路和系统总线构成的裸机系统。微型计算机系统是以微型计算机为主机,配上系统软件和外设之后而构成的计算机系统。微处理器是微型计算机的一组成部分,而微型计算机又是微型计算机系统的一组成部分。

1-2CPU在内部结构上由那几部分组成?

答:8位CPU在内部结构上由寄存器阵列、算术逻辑运算单元ALU、控制器和内部总线及缓冲器等部分组成。

1-3总线接口部件有哪些功能?8086的执行部件有什么功能?

答:总线接口部件的功能是负责与存储器、I/O端口传送数据。

执行部件的功能是负责指令的执行。

1-48086/8088的状态标志和控制标志分别有哪些?

答:8086/8088的状态标志有6个:CF、AF、SF、PF、OF、ZF,控制标志有3个:TF、DF、IF。

1-58086/8088和传统的8位计算机相比在执行指令方面有什么不同?这样的设计思想有什么优点?

答:8位饥是取一条指令,执行一条,再取,再执行;

8088执行时,取指与执行几乎是同时进行的。

1-68086/088微处理器中有哪些寄存器?通用寄存器中哪些可以作地址指针用?

答:8086/8088各有14个寄存器,它们可分为3组:

(1)四个通用寄存器和四个变址和指针寄存器,即AX,BX,CX,DX,SP,BP,SI,DI。

(2)四个段寄存器,即CS,DS,SS,ES。

(3)两个控制寄存器,即IP,FR。

1-78086/808820位物理地址是怎么样形成的?当CS=2000H,IP=0100H,其指向的物理地址等于多少?

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

20100

1-8将下列十进制数分别转换成二进制数、八进制数和十六进制数:

128,511,1024,65535,1048575,512,0625,27/32,0.4375

128:10000000,200,80

511:111111111,777,1FF

1024:10000000000,2000,400

65535:1111111111111111,177777,FFFF

1048575:11111111111111111111,3777777,FFFFF

512:100000000,1000,100

0625:100111001,1161,139

27/32:0.1101100B,0.660Q,0.D8H

0.4375:0.0111,0.34,0.7

1-9将下列二进制数转换成十进制及十六进制数:1100110101B,101101.1011B

答:1100110101:821,335

101101.1011B:45.6875,2D.BH

1-10(4578)10=(0100010101111000)BCD=1000111100010B

1-11写出下列数的原码、反码、补码、和移码(设字长为8位):

15,-20,-27/32

15:00001111,00001111,00001111,10001111

-20:10010100,11101011,11101100,01101100

-27/32:1.1101100,1.0010011,1.0010100,0.0010100

1-1216位无符号定点整数的数值表示范围为多少?8位补码表示的数值范围是多少?16位补码呢?(整数情况)

答:16位无符号数表示的范围是0~~65535

8位补码表示的数值范围为+127~~-128。

16位补码表示的范围是-32768~~32767

1-13当两个正数相加时,补码溢出意味着什么?两个负数相加能产生溢出吗?试举例说明。

答:两个正数相加,补码溢出意味着其和正方向超出数域范围而产生错误结果。例如,当N=8时,用补码求109加84之和,所得结果(也为补码)为11000001,其真值为-63,显然出错了。原因是193>127。两个负数相加也可能产生溢出。当和小于-128时产生负向溢出。例如用补码求-l09加-84之和,得结果100111111(补码),其真值为+63。出错原因是-193<-128。

1-14写出3,A,ESC,CR,SP的ASCII码。

3:33H

A:41H

ESC:1BH

CR:0DH

SP:20H

1-15每个汉字的编码有几个字节组成?计算机中如何区别ASCII码和汉字内码?答:两个字节。在机器中汉字是以内码形式存储和传输的。

1-16设有两个正的浮点数N1=2P1*S1,N2=2P2*S2,问:(1)若P1>P2,是否有N1>N2?(2)若S1,S2是规格化的,上述结论是否正确?

答:(1)不能(2)正确

第二章8088/8086的指令系统

2-1试述8088微处理器的各种寻址方式,并写出各种寻址方式的传送指令1~~2条(源操作数寻址与目的操作数寻址)

答:立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,变址寻址,基址加变址寻

址。

2-2对8086/8088CPU指出下列指令中哪些是错误的并说明原因。

(1)MOVBL,AX,W

(2)MOV100,CXW

(3)MOV[SI],AXR

(4)MOVCS,AXW

(5)MOV[SI],BUFFERW

(6)OUT541H,ALW

(7)INBL,DXW

(8)LEABX,AXW

(9)MOVBX,2[DI]R

(10)xchgal,100W

(11)movbyteptr[bx],1000W

(12)movax,[bp+4]R

(13)movax,csR

(14)movss,2400hW

2-3连续执行以下指令.填写指令执行结果.并上机验证结果。假设M代表存储单元物理地址.[R]代表寄存器间接寻址的存储单元内容,FLAGL代表标志寄存器低字节。SRC代表履操作数,DST代表目的操作数,MOD代表寻址方式。填空时用IM代表立即寻址方式.DRT代表直接寻址方式,R代表寄存器寻址方式,RIN代表寄存器间接寻址方式,IDX代表变址寻址方式.R&IDX代表基地址加变址寻址方式。

;exse2_3

MOVAX,2000H;AH=20HMOD=立即寻址

MOVDS,AX;AL=00HDS=2000HMOD=寄存器

MOVSS,AX;SS=2000HAX=2000H

MOVBX,2050H;BH=20HBL=50H

MOVSI,BX;SI=2050H

MOVDl,3050H;DI=3050H

MOVS1.DI;SI=3050H

MOVSP,5FFFH;SP=5FFFFH

MOVCL,25;CL=19H

MOVBL,CL;CL=19H

MOVAH,0F0H;AH=0F0H

MOVCH,AH;CH=0F0H

MOVBYTEPTR[DI],64;

[DI]=40HM=23050SRCMOD=DSTRIN

MOVWORDPTR[SI],256;[SI]=00[SI+1]=01H

M=;DSTMOD=RIN

MOVDL,[SI+1];DL=01H,M=23051,SRCMOD=IDX

MOVDH.1[SI];DH=01H,M=23051,SRCMOD=IDX

M0VAL,1十[SI];AL=01H,M=23051H

M0VWORDPTR[Bx][s1],34;[Bx十SI]=22H,DSTMOD=B&IDX,[BX+SI+1]=00H

MOV[BX+SI+4],BX;[BX+SI+4]=19H,20H

MOV2[BX+SI],BX;DSTMOD=B$IDX

MOVBP,2[BX+DI];BP=2019M=2506B,2506CSRCMOD=B&IDX

MOV[BP][DI],BX;[BP][DI]=19H,20HM=25069H,2506AH

MOVAX,[BP][DI];AX=2019HM=25609H,2560AH

MOVBL,AL;BL=19H

MOVES,BX;ES=2019H

PUSHBX;SP=5FFDH,,[SP]=19H,[SP+1]=20H

PUSHDI;SP=5FFBH,[SP]=50H,[SP+1]=30H

POPCX;SP=5FFDH,CX=3050H

POPDX;SP=5FFFH,DX=2019H

XCHGAX,BP;AX=2019,BP=2019H

XCHGDH,BL;DH=19H,BL=20H

SAHF;AH=20H

CMC;CF=1

LAHF;AH=03H

STD;DF=1

CLI;IF=0

INT20

2-4连续执行以下指令,填写执行指令的结果,并上机核对结果

答:;exse2-4.asm

MOVAX,3502H;AL=02H,AH=35H,CF=0

MOVDS,AX;DS=3502H,AH=35H,CF=0

ADDAL,AH;AL=37H,AH=35H,CF=0

MOVDX,258;DH=01H,DL=02H,CF=0

SUBAX,DX;AX=3435H,DX=0102H,CF=0

MOVCX,0E0BAH;CX=E0BAH,CF=0

MOVAX,2400H

ADDAX,CX;AX=04BAH,CX=E0BAH,CF=1

ADCCX,AX;CX=E575H,AX=04BAH,CF=0

MOVSI,4000H;SI=4000

MOV[SI],CX;[SI]=75H,[SI+1]=E5H,M=39020

ADC[SI],AL;[SI]=2FH,CF=1

DECBYTEPTR[SI];[SI]=2EH,CF=1

MOVAX,09H;AX=0009H

ADCAX,09H;AX=0013H

AAA;AX=0109H,CF=1

ADDAL,09H;AL=12H

DAA;AL=18H

ADDAL,98H;AL=B0H,CF=0,AF=0

DAA;AL=18H,CF=1

MOVAL,5;AL=05H

NEGAL;AL=FBH

MOVBX,-15;BX=FFF1H

NEGBX;BX=000FH

CMPBH,BL;BH=00H,BL=0FH

MOVDL,20;DL=14H

MOVAL,5;AL=05h

MULDL;AX=0064H,DL=14H

MOVCH,4

DIVCH;AX=0019H,CH=04H

MOVDX,0F00H;DX=F000H

MULDX;AX=7000H,DX=0017H

MOVAL,5

NEGAL;AL=FBH

CBW;AH=FFH,AL=FBH

MOVDX,5;DX=0005H

IMULDX;AX=FFE7H,DX=FFFFH

MOVAX,5;AX=0005H

CWD;AX=0005,DX=0000H

MOVCX,5;CX=0005

NEGCX;CX=FFFBH

IDIVCX;AX=FFFFH,DX=0000

MOVAX,05H;AX=0005

NOTAX;AX=FFFAH

MOVBL,16H;BL=16H

ANDAH,BL;AH=16H,BL=16H

MOVCX,0F54BH;CX=F54BH

ORAX,CX;AX=F7FBH

XORCX,AX;AX=F7FBH,CX=02B0H

XORCX,AX;AX=F7FBH,CX=F54BH

MOVAX,0FFFFH;

XORCX,AX;CX=0AB4H

TESTCX,1234H;CX=0AB4H,PF=0,ZF=0,CF=0,SF=0

MOVAL,9

SARAL,1;AL=04H

MOVCL,4;CX=0A04H

PUSHCX

SHLAL,CL;AL=40H,CX=0A40H,CF=0

POPCX;CX=0A40H

MOVBX,850H;

RCLBX,CL;BX=8500H,CF=0

RORBX,1;BX=850H,CF=0

MOVDI,4050H

MOV[DI],BX

SARBYTEPTR[DI],1;[DI]=28H,M=39070H

CLC;CF=0

CMC

STC

CLD

STD

CLI

STI

INT20H;CF=1;CF=1;DF=0;DF=1;IF=0;IF=1;

2-5将共阳LED显示器所用BCD码数字0~~9的七段码列成一张表,从10H号外设端口读入0~~9的ASCII码,将它转换为七段码后输出到20H号端口去。写出完成上述任务的指令序列。

解:完成以上任务指令如下;

MOVBX,0FPSETTABLE;BX指向表首址

INAL,10H

SUBAL,30H

XLATTABLE

OUT20H,AL

TABLEDB0C0H,0F9H

DB0A4H,0B0H

DB99H,92H

DB82H,0F8H

DB80H,90H

2-6写出根据BX寄存器中b5=0转到标号L1的指令序列。若b5=1转移应作何修改?SALBL,2

SUBBL,80H

JGEL1

解:根据BX中的b5=0转:

TESTBX,0020H

JZL1

根据BX中的b5=1转L1

TESTBX,0020H

JNZL1

2-7写出BX和SI寄存器内容进行交换的堆栈操作指令序列,并画出堆栈区和SP的内容变化过程示意图。

答:PUSHBX

PUSHSI

POPBX

POPSI

2-8设a,b,c,d是互不相等的8位带符号数(补码),并假设加减法运算均不产生溢出。试写出完成下列运算的程序段,结果放在DX和AX中。

(1)(a+b)/(c-d)

(2)(a+b)*(c-d)

答:(1)(a+b)/(c-d)的程序段如下

MOVAL,a

ADDAL,b

MOVBL,c

SUDBL,d

CBW

IDIVBL

(2)(a+b)*(c-d)的程序段如下

MOVAL,a

ADDAk,b

MOVBL,c

SUBBL,d

IMULBL

2-9利用串操作指令完成数据从AREA1起始区域的100个字节传送到以AREA2为始地址的区域。(两个区域可重叠)。

答:MOVAX,2000H

MOVDS,AX

MOVES,AX

LEASI,AREA1

LEADI,AREA2

MOVCX,100

CMPSI,DX

JEDONE

JADF0

STD

ADDSI,99

ADDDI,99

JMPTRAN

DF0:CLD

TRAN:REPMOVSB

DONE:20H

2-10在指令CMPAX,BX后面跟一条格式为J*L1的条件转移指令,其中*可以是B,NB,BE,NBE,L,NL,NLE中任一个,如果AX和BX的内容如下:

AXBX

(1)3500H3500H

(2)0ABCDH7500H

(3)0FCD0H0FFE0H

(4)5678H4500H

(5)4567H0BA00H

对每一组AX和BX数据,使用哪几种格式的转移指令将引起程序转移到L1?

答:在*可取的8种形式中,前四种是将参与比较的AX和BX中的数看成是无符号数,B含义是低于(即AX低于BX)、NB是不低于、既是低于或等于、NBE是不低于且不

等于;后四种是将AX和BX中的数看成是符号数(补码),L含义是小于、NL是不小于、LE是小于或等于、NLE是不小于且不等于。

(1)只要包含有“等于”的,号形式均可使程序转移到L1,所以可取NB、BE、NL和LE。

(2)若将0ABCDH和7500H看成无符号数,则前者高于后者,所以可取NB、NBE。若将它们看成符号数,前者为负,后者为正,所以可取L和LE。

(3)与(2)同理,*可取B、BE、L和LE四种。

(4)*号可取NB、NBE.NL和NLE四种。

(5)*号可取B、BE、NL和NLE四种。

2-11试将Buffer起始的50个字节的组合BCD数字转换成ASCII码存放于ASC为起始地址的单元中,高位BCD数字位于较高地址。

解:

LEASI,BUFFER

LEADI,ASC

MOVCX,50

L1:MOVAL,[SI]

MOVBL,AL

ANDAL,0FH

ORAL,30H

MOV[DI],AL

INCDI

MOVAL,BL

PUSHCX

MOVCL,4

SHRAL,CL

POPCX

ANDAL,0FH

ORAL,30H

MOV[DI],AL

INCDI

INCSI

LOOPL1

INT20H

2-12给以TAB为首的100个ASCII码字符添加奇偶校验位(bit7)使每个字节中的“1”的个数为偶数,再顺序输出到10H号端口。

解:MOVSI,OFFSETTAB

MOVCX,100

L2:MOVAL,[SI]

ANDAL,0FFH

JPL1

ORAL,80H

L1:OUT10H,AL

INCSI

LOOPL2

INT20H

2-13已知四字节数存放于NUM开始的连续四字节中,高字节位于高地址。试编写将它左移一位的程序。(假设移位后字节数不变)。

解:LEABX,NUM

SALWORDPTR[BX+0],1

RCLWORDPTR[BX+2],1

2-14设DS=2100H,SS=2400H,BX=1400H,BP=0010H,说明下面两条指令所进行的具体操作:

MOVWORDPTR[BP],2000

MOVWORDPTR[BX],2000

解:(1)BP与SS段寄存器确定存放的物理地址,指令执行后[24010H]=D0H,

[24011H]=07H

(2)BX与DS段寄存器碘定存放的物理地址,指令执行后[22400H];D0H,

[22401H]=07H

2-15用串操作指令设计实现如下功能的程疗段:首先将100H个数从2170H处搬1000H处.然后从中检索出内容与VAL相等的单元.并将此单元内容换成空格符。

解:MVSCH:MOVAX,DS

MOVES,DS

MOVSI,2170H

MOVDI,1000H

MOVCX.100H

CLD

REPMOVSB

MOVBL,00H

MOVCX,100H

MOVDI,1000H

MOVAL.VAL

L2:REPNESCASB

JZL1

JMPDONE

L1:DECDI

MOVSYTEPTR[D1],20H

MOVBL,0FFH

INCDI

INCCX

LOOPL2

CONE:RET

2-16下面程序段实现对两个存储区中的字进行比较。如找到一对不同的字,则退出,此时,ZF标志为0,DI指向此字;如两个存储块中所有字均一一相同.则退出程序时,CX中值为0,ZF标志为1阅读这一程序段,填写空白(添加合适的指令),并仿此设计一个比较字节块的程序段。

;exse2_16.asm

MATT:MOVSI,OFFSETSOUCE;源区首址

MOVDI,OFFSETTARGET;目的区首址

MOVCX,NUMBER

JCXZEXIT;如CX为0,则结束

PUSHCX;保存有关寄存器

PUSHSI

PUSHDI

————;设置方向标志

REPECMPSW;比较

————;ZF=1,则转移

PUSHF;ZF=0,则DI指向此字

SUBDI,2

POPF

————;再退出

MATCH:POPDI

POPSI

POPCX

EXIT:RET

解:三个空白处分别填CLD;JZMATCH,JMPEXIT。字节块比较程序只需将原程序段中的CMPSW改为CMPSB;SUBDI,2改为别SUBDI,1即可。程序中JCXZEXIT指令操作是当CX=0时,则转至标号EXIT处。EXIT标号离本指令IP的距离必须在-128至+127范围之内。

2-17从80286与8088指令系统看.80286CPU的功能比8088CPU在哪些方面有所加强?答:80286有实地址和虚地址保护两种运行方式。80286的实地址运行方式兼容了8088/8086全部功能。因此8088/8086的汇编语言程序可以在80286上运行。此外还增加了堆栈传送指令和输入输出的串操作指令。80286CPU比8088/8086CPU功能增强主要体现在虚地址保护运行方式下,除可执行8088/8086指令集外,还提供了存储管理和保护的指令.使内存增至16MB,虚拟存储达1GB,并具备运行多任务的能力。

第三章汇编语言程序设计

3-1填写以下空白并上机检查答案是否正确。

;exse3-1.asm

DATASEGMENTPARA‘DATA’

QAEQU255;QA=0FFH

QA1=QAGT3000;QA1=0

QA2=0FFFH;QA2=0FFFH

QA3EQUQA2-255;QA3=0F00H

QA4=88MOD5;QA4=3

QA5=88HSHR2;QA5=22H

QA6=QA3/16+15;QA6=10FH

ORG1060H

G1DB32,QA,98/2,NOT25;DS:1060H:20H,0FFH,31H,0E6H

G2DWOFF6H,OFFSETG2;DS1064H:0F6H,0FH,64H,10H

G3DW3DUP(5);DS1068H:05H,00H,05H,00H,05H,00H

G4DWSEGG1;:

SAEQULENGTHG3;SA=3

SBEQUSIZEG3;SB=6

SC=TYPEG3ORG1200H;SC=2

F1=THISWORD;OFFSETF1=12000H,TYPEF1=2

F2DB11H,22H,33H,44H;1200H:11H,22H,33H,44H

FFDD12345H;1204H:45H,23H,01H,00H

DATAENDS

STACKSEGMENTSTACK‘STACK’

DB100DUP(?)

STACKENDS;SP=0064H

CODESEGMENTWORD‘CODE’

ASSUMECS:CODE,DS:DATA

STARPROCFAR

PUSHDS

XORAX,AX

PUSHAX

MOVAX,DATA

MOVDS,AX

MOVAL,BYTEPTRG2;AL=0F6H

MOVBL,TYPEEF;BL=04H

MOVAX,WORDPTRFF;AX=2345H

ANDAX,0FFH;AX=0045H

MOVBX,WORDPTRG1;BX=0FF20H

MOVBX,255AND0FH;BX=000FH

MOVCL,LOWQA4;CL=03H

MOVAL,LOWQA1;AL=0

MOVBL,HIGHQA5;BL=0

MOVDL,TYPESTAR;DL=0FEH

ADDAX,OFFSETF2;AX=1200H

MOVBX,F1;BX=2211H

RET

STARENDP

CODEENDS

ENDSTAR

3-2指令ANDAX,XANDY中X和Y是两个已赋值的常量,问:两个AND操作分别

在什么时间进行?功能上有何区别?

答:指令中的XANDY操作在程序汇编时进行,该操作完成后得到一个数,即为指令中的第二操作数。由此得到“ANDAX,立即数”这样形式的一条指令,由汇编器将其翻译为机器码。该指令中的AND操作由CPU在执行指令时完成,结果存于AX中,并影响F寄存器。

3-3指出以下三条指令的区别(NUM为数据段一个变量名)。

(1)MOVSI,NUM

(2)LEAS1,NUM

(3)MOVSI.OFFSETNUM

(1)内容送SI(2)把NUM的值送SI地址(3)把NUM的偏移地址送SI

答:(1)指令执行后SI取得酌是内存变量NUM的值。

(2)指令执行后SI取得的是内存变量NUM的偏移地址

(3)同(2)。

3-4下面是一个实现多字节非组合BCD码相加的程序.阅读此程序后设计一个实现多字

节组合比BCD码相加的程序。若是减法.程序应作何修改?若进行多字节二进制数加(减)法又应怎样修改?

;exse3_4.asm

datasegment

num1db3,5,6,1,4

contequ$—numl

num2db4,7,8,2,3

sumdbcontdup(0)

dataends

stacksegmentparastack‘stack’

db100dup(‘s’)

stackends

codesegment

asumecs:code,ds:data,

begin:movax,data

movds.ax

moves,ax

leasi,.numl

leabx,num2

leadi,sum

addsi,cont-1

addbx,cont-1

adddi,cont-1

movcx,cont

std

clc

l1:lodsb

adcal,[bx]

aaa

stosb

decbx

loopl1

movah,4ch

int21h

codeends

endbeginss:stackes:data

解;(1)多字节组合BCD码相加程序,只需将程序中的AAA指令改为DAA指令。

(2)多字节组合BCD码减法程序,只得将程序中的ADCAL,[BX]改为SBBAL,[BX];把AAA指令改为DAS指令。

(3)多字节非组合BCD码减法,则需把程序中的ADCAL,[BX]改为SBBAL,[BXl5把AAA指令改为AAS指令‘

(4)若是多字节二进制数加法.则只需将原程序中的AAA指令去掉即可。

(5)若是多字节二进制数减法,则需将原程序中的ADCAL,[BX]改为SBBAL去掉AAA指令。

3-5定义一条宏指令,它可以实现任一数据块的传送(假设无地址重达发生).只要给出源和目的数据块的首地址以及数据块的长度即可。给出一个使用该定调用进行程序块传送的编程。

解:BLKMOVMACROBLX.DLY,Z

PUSHSI

PUSHN

PUSHCX

PUSHF

CLD

LEASI,BLX

LEAD1,BLY

MOVCX,Z

REPMOVSB

POPF

POPCX

POPDI

POPS1

ENDM

DATASEGMENT

BLOCK1DB11,22,33,44,55,66,77,88,99,00

LENTH1EQU$—BLOCKl

BLOCK2DBLENTHlDUP(?)

DATAENDS

STACKSEGMENTPARASTACK’STACK’

DBl00DUP(’S’)

STACKENDS

CODESCGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK,ES,DATA

BEGIN:MOVAX.DATA

MOVDS,AX

MOVES,AX

BLKMOVBLOCK1,BLOCK2.LINTHI

MOVAH,4CH

INT21H

CODEEND5

ENDBEGIN

3-6利用例3-232位无符号数乘法的过程没计进行32位符号数乘法的运算的程序。方法如下:首先设一个乘积的符号标志(可以是一个字节)为0;检查被乘数,若为负,一方面对被乘数取补,另一方面对符号标志取反;再检查乘数,若是负数也对乘数取补和符号标志取反;然后调用32位无符号数乘法程序,最后检查乘积符号标志.若为负(即两个异号数相乘),则对64位乘积取补。画出流程图并编写程序。

解:DATASEGMENT

NUM1DW0000H,8000H

NUM2DW2000H.7800H

MUTDW4DUP(0)

SIGNDB?

DATAENDS

STACKSEGMENTPARASTACK

DB100DUP(’S’)

STACKENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,ES:STACK

MULS32PROCFAR

PUSHDS

XORAX,AX

PUSHAX

MOVAX,DATA

MOVDS,AX

MOVSIGN,0

LEABX,NUM1

CMPWORDPTB[BX+2],0

JNSL1

NOTWORDPTR[BX]

NOTWORDPTR[BX+2]

ADDWORDPTR[BX],1

ADCWORDPTR[BX十2],0

NOTSIGN

L1:CMPWORDPTR[BX+6],0

JNSL2

NOTWORDPTR[BX+4]

NOTWORDPTR[BX+6]

ADDWORDPTR[BX十4],1

ADCWORDPTB[BX十6],o

NOTS1GN

L2:CALLMULU32

CMPSIGN,0

JEDONE

NOTWORDPTR[BX+8]

NOTWORDPTR[BX+10]

NOTWORDPTR[BX+12]

NOTWORDPTR[BX+141

ADDWORDPTR[BX+8],1

ADCWORDPTR[BX+10],0

ADCWORDPTR[BX十121,0

ADCWORDPTR[BX十14].0

DONE:RET

MULS32ENDP

MULU32PROC

LEABX,NUM1

MOVAX,[BX]

MOVSI,[BX+4]

MOVDI,[BX+6]

MULSI

MOV[BX+8],AX

MOV[BX+10],DX

MOVAX,[BX+2]

ADD[BX+10],Ax

ADC[BX+12],DX

MOVAX,[BX]

MULDI

ADD[BX+10],Ax

ADC[BX+12],DX

ADCWORDPTR[BX+14]

MOVAX,[BX+2]

MULDI

ADD[BX+12],AX

ADC[BX+14],DX

RET

MULU32ENDP

CODEENDS

ENDMULS32

3-7试编程序判断变量VAL是否满足下述关系.满足时置BL=0FFH,否则置BL=00H:

(1)24<VAL<=5AH设VAL为无符号数。

(2)-5<VAL<32H设VAL为符号数。

解:DATASEGMENT

VALDB32

DATAENDS

STACKSEGMENTPARASTACK‘STACK’

DBl00DUP(’s’)

STACKEND6

CODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK

JUDGE1PROCFAR

L1:PUSHDSXORAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVAL,VALCMPAL,24JBEL1CMPAL,5AHJAL1MOVBL,0FFHJMPDONEMOVBL,00H

JUDGE1ENDP

ENDJUDGE1

(2)

DATASEGMENT

VALDB12H

DATAENDS

STACKSEGMENTSTACK‘STACK’

DB50DUP(’S’)

STACKENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,ES:sTAcK

BEGIN:MOVAX.DATA

MOVDS,AX

CMPVAL,32H

JGEL1

CMPVAL,-5

JLL1

MOVBL,0FFH

JMPL2

L1:MOVBL,00H

L2:MOVAH,4CH

INT21

CODEENDS

ENDBEGIN

3-8利用DOS功能1号调用输入一位16进制数、将它转换为ASCII码、BCD码和格霄码.并在CRT上显示出来。提示:可在数据段建立三张表.然后用基址变址寻址方法来查表(也可用查表指令)。

DATASEGMENT

TABLEDB‘0123456789ABCDEF’

DB0,1,2,3,4,5,6,7,8,9,10H,11H,12H,13H,14H.15H

DB0,1,3,2,6,7,5,4,0CH.0DH,0FH,0EH,0AH、0bH,9,8

3微机原理与接口技术 习题与课后答案 (雷丽文 著) 电子工业出版社.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

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