微机原理汇编语言与接口技术第四章习题答案人民邮电出版社周杰英张萍郭雪梅著.docx

上传人:b****8 文档编号:9161207 上传时间:2023-02-03 格式:DOCX 页数:17 大小:18.89KB
下载 相关 举报
微机原理汇编语言与接口技术第四章习题答案人民邮电出版社周杰英张萍郭雪梅著.docx_第1页
第1页 / 共17页
微机原理汇编语言与接口技术第四章习题答案人民邮电出版社周杰英张萍郭雪梅著.docx_第2页
第2页 / 共17页
微机原理汇编语言与接口技术第四章习题答案人民邮电出版社周杰英张萍郭雪梅著.docx_第3页
第3页 / 共17页
微机原理汇编语言与接口技术第四章习题答案人民邮电出版社周杰英张萍郭雪梅著.docx_第4页
第4页 / 共17页
微机原理汇编语言与接口技术第四章习题答案人民邮电出版社周杰英张萍郭雪梅著.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

微机原理汇编语言与接口技术第四章习题答案人民邮电出版社周杰英张萍郭雪梅著.docx

《微机原理汇编语言与接口技术第四章习题答案人民邮电出版社周杰英张萍郭雪梅著.docx》由会员分享,可在线阅读,更多相关《微机原理汇编语言与接口技术第四章习题答案人民邮电出版社周杰英张萍郭雪梅著.docx(17页珍藏版)》请在冰豆网上搜索。

微机原理汇编语言与接口技术第四章习题答案人民邮电出版社周杰英张萍郭雪梅著.docx

微机原理汇编语言与接口技术第四章习题答案人民邮电出版社周杰英张萍郭雪梅著

微机原理、汇编语言与接口技术-第四章-习题答案-人民邮电出版社-(周杰英-张萍-郭雪梅-著)

第4章汇编语言程序设计

习题与参考答案

1、指出以下数据定义伪指令所分配的字节数(8086系统)。

(1)DATA1DB10,?

,‘A’

(2)DATA2DW10DUP(2,3DUP(?

),1)

(3)DATA3DB‘HELLO,WORLD!

’,‘$’

(4)DATA4DWDATA4

解:

(1)3字节;

(2)100字节;(3)13字节;(4)2字节。

2、指出以下数据定义伪指令所分配的字节数(80386系统)。

(1)DATA1DF12,34,56

(2)DATA2DFDATA2

(3)DATA3DQ0,10DUP(?

(4)DATA4DT0,1,2

解:

(1)18字节;(3)6字节;(3)88字节;(4)30字节。

3、指出以下指令中哪些是无效的,并说明原因。

(1)ADDRDB$

(2)DATADBF0H,12H

(3)1_DATADW1234H

(4)@VARDWVAR1;VAR1为一个字节变量

(5)MOVAX,[10-VAR1];VAR1为一个字变量

(6)MOVBX,[VAR2*2+1];VAR2为一个字变量

解:

(1)非法,地址计数器$是32位数;

(2)非法,以字母开头的16进制数应在前面加“0”,即应为“0F0H”;

(3)非法,变量名非法,不能以数字开头;

(4)合法;

(5)非法,地址表达式不能是“常数-地址”;

(6)非法,地址表达式不能出现乘法。

4、假设已定义数据段如下:

DATASEGMENT

ORG100H

DATA1DB10DUP(1,2,3)

DATA2DWDATA1,$

DATAENDS

且段寄存器DS已初始化为该数据段的段基址(假设段基址为1234H)。

请指出以下指令执行后,相应的寄存器中的内容。

(1)MOVAX,WORDPTRDATA1;(AX)=?

(2)MOVBX,DATA2;(BX)=?

(3)MOVCX,DATA2+2;(CX)=?

(4)MOVDX,OFFSETDATA2;(DX)=?

(5)MOVSI,SEGDATA1;(SI)=?

(6)MOVDI,LENGTHDATA1;(DI)=?

(7)MOVSP,TYPEDATA1;(SP)=?

(8)MOVBP,SIZEDATA2;(BP)=?

解:

(注意是16进制,算的时候要转换)

(1)(AX)=0201H;

(2)(BX)=0100H;(3)(CX)=0120H;(4)(DX)=011EH;

(5)(SI)=1234H;(6)(DI)=000AH;(7)(SP)=0001H;(8)(BP)=0002H。

5、在8086系统下,编写完整程序,实现从键盘上输入8位二进制数,从显示器上显示相应的16进制数,例如从键盘上输入“00010010”,应在显示器上显示“12H”。

解:

参考程序:

DATASEGMENT

MSG1DB'Inputbinarynumber(ESCtoexit):

','$'

MSG2DB0AH,0DH,'Inputerror!

',0AH,0DH,'$'

DATAENDS

OUTPUTMACROASC;定义输出一个字符的宏

MOVDL,ASC

MOVAH,2

INT21H

ENDM

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

MAINPROCFAR

PUSHDS

MOVAX,0

PUSHAX

MOVAX,DATA

MOVDS,AX

AGAIN:

LEADX,MSG1

MOVAH,9

INT21H;提示输入信息

MOVCX,8;输入8位二进制数

MOVBL,0

L:

MOVAH,1

INT21H

SHLBL,1

CMPAL,1BH;ESC键退出

JZDONE

CMPAL,'0';输入“0”

JZNEXT

CMPAL,'1';输入“1”

JNZERROR;输入其他则出错

INCBL

NEXT:

LOOPL

OUTPUT0AH

OUTPUT0DH

PUSHBX

MOVCL,4

SHRBL,CL

CALLTRAN;显示高4位对应的16进制数

POPBX

ANDBL,0FH

CALLTRAN;显示低4位对应的16进制数

OUTPUT'H'

OUTPUT0AH

OUTPUT0DH

JMPAGAIN

ERROR:

LEADX,MSG2

MOVAH,9

INT21H

JMPAGAIN

DONE:

RET

MAINENDP

TRANPROCFAR

CMPBL,0AH

JBBELOW

ADDBL,7

BELOW:

ADDBL,30H

OUTPUTBL

RET

TRANENDP

CODEENDS

ENDMAIN

6、在8086系统下,编写完整程序,实现从键盘上输入两个4位十进制数,从显示器上显示这两个数之和,例如输入“1234”、“5678”,应在显示器上显示“6912”。

解:

参考程序:

DATASEGMENT

MSG1DB'Inputthefirstnumber(ESCtoexit):

','$'

MSG2DB'Inputthesecondnumber(ESCtoexit):

','$'

MSG3DB0AH,0DH,'Inputerror!

Inputagain:

','$'

DATAENDS

OUTPUTMACROASC;定义输出一个字符的宏

MOVDL,ASC

MOVAH,2

INT21H

ENDM

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

MAIN:

MOVAX,DATA

MOVDS,AX

AGAIN:

LEADX,MSG1

MOVAH,9

INT21H;提示输入第一个数

CALLINPUT;输入过程

PUSHBX

OUTPUT0AH

OUTPUT0DH

LEADX,MSG2

MOVAH,9

INT21H;提示输入第二个数

CALLINPUT;输入过程

OUTPUT0AH

OUTPUT0DH

POPAX;实现两个4位组合BCD码相加

ADDAL,BL;低8位相加

DAA;校正

MOVCL,AL;保存至CL

ADCAH,BH;高8位相加

MOVAL,AH;移至AL

DAA;校正

MOVAH,AL

MOVAL,CL

MOVBX,AX;最后结果放在BX中

JNCNEXT

OUTPUT'1';如果相加结果大于9999,则显示进位“1”

NEXT:

PUSHBX

MOVCL,4

SHRBH,CL

ADDBH,30H

OUTPUTBH;显示千位数

POPBX

PUSHBX

ANDBH,0FH

ADDBH,30H

OUTPUTBH;显示百位数

POPBX

PUSHBX

MOVCL,4

SHRBL,CL

ADDBL,30H

OUTPUTBL;显示十位数

POPBX

ANDBL,0FH

ADDBL,30H

OUTPUTBL;显示个位数

OUTPUT0AH

OUTPUT0DH

JMPAGAIN

INPUTPROCFAR;输入一个4位十进制数的过程

BEGIN:

MOVCX,4

MOVBX,0

L:

SHLBX,1

SHLBX,1

SHLBX,1

SHLBX,1;BX的值乘以16

MOVAH,1

INT21H;输入

CMPAL,1BH;ESC键退出

JZDONE

CMPAL,'0'

JBERROR;非数字,出错

CMPAL,'9'

JAERROR;非数字,出错

SUBAL,30H

XORAH,AH

ADDBX,AX;将输入加到BX中

LOOPL

RET

ERROR:

LEADX,MSG3

MOVAH,9

INT21H

JMPBEGIN

DONE:

MOVAH,4CH

INT21H

INPUTENDP

CODEENDS

ENDMAIN

7、在8086系统下,编写完整程序,实现两个32位带符号数相乘。

假设被乘数存放在以字变量MUL1开始的连续4个字节中,乘数存放在以字变量MUL2开始的连续4个字节中中,相乘结果存放在以字变量RES开始的连续8个字节中。

解:

参考程序:

DATASEGMENT

MUL1DW0FFFFH,0FFFFH;被乘数

MUL2DW5678H,1234H;乘数

RESDW4DUP(0);结果

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

MAINPROCFAR

PUSHDS

MOVAX,0

PUSHAX

MOVAX,DATA

MOVDS,AX

MOVCX,MUL1

MOVBP,MUL1+2

MOVSI,MUL2

MOVDI,MUL2+2

TESTBP,8000H;被乘数是否为负数

JZNEXT1

NOTBP;为负数,则取反加1

NOTCX

ADDCX,1

ADCBP,0

NEXT1:

TESTDI,8000H;乘数是否为负数

JZNEXT2

NOTSI;为负数,则取反加1

NOTDI

ADDSI,1

ADCDI,0

NEXT2:

MOVAX,SI;相乘过程

MULCX

MOVRES,AX

MOVRES+2,DX

MOVAX,SI

MULBP

ADDRES+2,AX

ADCRES+4,DX

MOVAX,DI

MULCX

ADDRES+2,AX

ADCRES+4,DX

MOVAX,DI

MULBP

ADDRES+4,AX

ADCRES+6,DX

MOVAX,MUL1+2

XORAX,MUL2+2;判断被乘数和乘数是否同号

JNSDONE;同号,则结果为正数,无须修改结果

NOTRES;不同号,则结果为负数,须取反加1

NOTRES+2

NOTRES+4

NOTRES+6

ADDRES,1

ADCRES+2,0

ADCRES+4,0

ADCRES+6,0

DONE:

RET

MAINENDP

CODEENDS

ENDMAIN

8、在8086系统下,编写完整程序,找出字节数组ARRAY中的最大值和最小值。

假设ARRAY的长度为100个字节,每个字节为一个无符号数,程序执行后最大值将存放到字节变量MAX中,最小值则存放到字节变量MIN中。

解:

参考程序:

DATASEGMENT

ARRAYDB100DUP(?

);字节数组

MAXDB?

;最大值

MINDB?

;最小值

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

MAINPROCFAR

PUSHDS

MOVAX,0

PUSHAX

MOVAX,DATA

MOVDS,AX

LEASI,ARRAY

CLD

MOVBH,0;存放临时最大值的寄存器

MOVBL,0FFH;存放临时最小值的寄存器

MOVCX,100

AGAIN:

LODSB

CMPAL,BH

JNANEXT1

MOVBH,AL;如果当前数值比临时最大值大,则代替

NEXT1:

CMPAL,BL

JNBNEXT2

MOVBL,AL;如果当前数值比临时最小值小,则代替

NEXT2:

LOOPAGAIN

MOVMAX,BH

MOVMIN,BL

RET

MAINENDP

CODEENDS

ENDMAIN

9、在8086系统下,编写完整程序,将字节数组ARRAY中的所有数据往高地址的方向移动一位,即原来存放在ARRAY中的字节移动到ARRAY+1中,原来存放在ARRAY+1中的字节移动到ARRAY+2中,……,依此类推。

假设ARRAY的长度为100个字节。

解:

可利用MOVSB指令实现移位,但应该注意,必须从串尾开始移动,因为假如直接从串头开始,将串头移到第二个数,那么第二个数将被覆盖。

为使程序能从串尾开始移动,可令方向标志位DF=1。

参考程序:

DATASEGMENT

ARRAYDB100DUP(?

),?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

MAINPROCFAR

PUSHDS

MOVAX,0

PUSHAX

MOVAX,DATA

MOVDS,AX

MOVES,AX

LEASI,ARRAY+99;SI指向源串尾

LEADI,ARRAY+100;DI指向新串尾

STD;DF=1,串尾先移动

MOVCX,100

REPMOVSB;循环移动

RET

MAINENDP

CODEENDS

ENDMAIN

10、在8086系统下,编写在长字符串L_STR中查找短字符串S_STR的完整程序,如果找到匹配的字符串,则将字节变量RES置0FFH,否则置0。

例如,在字符串“ABABCD”中可找到字符串“ABC”,则RES=0FFH。

解:

参考程序:

DATASEGMENT

L_STRDB'ABDABABCD';长串

L_LTHDW$-L_STR;长串长度

S_STRDB'ABC';短串

S_LTHDW$-S_STR;短串长度

RESDB?

;存放结果

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

MAINPROCFAR

PUSHDS

MOVAX,0

PUSHAX

MOVAX,DATA

MOVDS,AX

MOVES,AX

LEASI,L_STR

LEADI,S_STR

CLD

MOVCX,L_LTH

SUBCX,S_LTH

INCCX;作串比较的次数

AGAIN:

CALLCOMP;进行串比较

INCSI

LOOPAGAIN

MOVRES,0

RET

MAINENDP

COMPPROCFAR

PUSHCX

PUSHSI

PUSHDI

MOVCX,S_LTH

REPZCMPSB

JZYES;如果两个串相同,则说明找到

POPDI

POPSI

POPCX

RET

YES:

MOVRES,0FFH

MOVAH,4CH

INT21H

COMPENDP

CODEENDS

ENDMAIN

11、在80386系统下,编程实现两个64位无符号数相乘。

解:

参考程序:

.386

.MODELSMALL

.DATA

MUL1DD3456789AH,12345678H;被乘数

MUL2DD789ABCDEH,3456789AH;乘数

RESDD4DUP(0);存放128位结果,初始化为0

.CODE

MAIN:

MOVAX,@DATA

MOVDS,AX

MOVEAX,MUL2

MULMUL1

MOVRES,EAX

MOVRES+4,EDX

MOVEAX,MUL2

MULMUL1+4

ADDRES+4,EAX

ADCRES+8,EDX

MOVEAX,MUL2+4

MULMUL1

ADDRES+4,EAX

ADCRES+8,EDX

MOVEAX,MUL2+4

MULMUL1+4

ADDRES+8,EAX

ADCRES+12,EDX

MOVAH,4CH

INT21H

ENDMAIN

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 生产经营管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1