汇编语言补充作业和答案分析解析.docx

上传人:b****4 文档编号:4009859 上传时间:2023-05-06 格式:DOCX 页数:17 大小:20.04KB
下载 相关 举报
汇编语言补充作业和答案分析解析.docx_第1页
第1页 / 共17页
汇编语言补充作业和答案分析解析.docx_第2页
第2页 / 共17页
汇编语言补充作业和答案分析解析.docx_第3页
第3页 / 共17页
汇编语言补充作业和答案分析解析.docx_第4页
第4页 / 共17页
汇编语言补充作业和答案分析解析.docx_第5页
第5页 / 共17页
汇编语言补充作业和答案分析解析.docx_第6页
第6页 / 共17页
汇编语言补充作业和答案分析解析.docx_第7页
第7页 / 共17页
汇编语言补充作业和答案分析解析.docx_第8页
第8页 / 共17页
汇编语言补充作业和答案分析解析.docx_第9页
第9页 / 共17页
汇编语言补充作业和答案分析解析.docx_第10页
第10页 / 共17页
汇编语言补充作业和答案分析解析.docx_第11页
第11页 / 共17页
汇编语言补充作业和答案分析解析.docx_第12页
第12页 / 共17页
汇编语言补充作业和答案分析解析.docx_第13页
第13页 / 共17页
汇编语言补充作业和答案分析解析.docx_第14页
第14页 / 共17页
汇编语言补充作业和答案分析解析.docx_第15页
第15页 / 共17页
汇编语言补充作业和答案分析解析.docx_第16页
第16页 / 共17页
汇编语言补充作业和答案分析解析.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

汇编语言补充作业和答案分析解析.docx

《汇编语言补充作业和答案分析解析.docx》由会员分享,可在线阅读,更多相关《汇编语言补充作业和答案分析解析.docx(17页珍藏版)》请在冰点文库上搜索。

汇编语言补充作业和答案分析解析.docx

汇编语言补充作业和答案分析解析

《微机系统与接口技术》汇编补充作业

1.寻址方式小结。

请根据已填的格式,完成下面表中的空白部分:

寻址方式

操作数物理地址(PA)

指令格式举例

立即寻址

操作数由指令给出

MOVDX,100H;(DX)←100

寄存器寻址

操作数在寄存器中

MOVAX,BX;(AX)←(BX)

直接寻址

操作数的有效地址由指令直接给出

MOVAX,[1234H]

寄存器间接寻址

(BX)

PA=(DS)×16+(SI)

(DI)

或=(SS)×16+(BP)

MOVAX,[BX]

MOVAX,[SI]

MOVAX,[DI]

MOVAX,[BP]

基址寻址

PA=(DS)×16+(BX)+位移量

PA=(SS)×16+(BP)+位移量

MOVAX,BUFF[BX]

MOVAX,BUFF[BP]

变址寻址

PA=(DS)×16+(SI)+位移量

PA=(DS)×16+(DI)+位移量

MOVAX,BUFF[SI]

MOVAX,BUFF[DI]

基址变址寻址

PA=(DS)×16+(BX)+(SI)

PA=(DS)×16+(BX)+(DI)

PA=(SS)×16+(BP)+(SI)

PA=(SS)×16+(BP)+(DI)

MOVAX,[BX][SI]

MOVAX,[BX+DI]

MOVAX,[BP][SI]

MOVAX,[BP+DI]

基址变址相对寻址

PA=(DS)×16+(BX)+(SI)+位移量

PA=(DS)×16+(BX)+(DI)+位移量

PA=(SS)×16+(BP)+(SI)+位移量

PA=(SS)×16+(BP)+(DI)+位移量

MOVAX,BUFF[BX][SI]

MOVAX,BUFF[BX+DI]

MOVAX,BUFF[BP][SI]

MOVAX,BUFF[BP+DI]

2.指出下列8088指令的错误:

(1)MOVAH,BX

(2)MOV[BX],[SI]

(3)MOVAX,[SI][DI]

(4)MOVMYDAT[BX][SI],ES:

AX

(5)MOVBL,1000

(6)MOVCS,AX

(7)MOVDS,BP

(8)XLATBX

(9)INAX,0382H

(10)OUTAX,20H

答:

(1)两个操作数长度不一致

(2)两个操作数不能都是存储器操作数

(3)变址寻址方式不能使用两个变址寄存器

(4)寄存器寻址没有段超越用法

(5)两个操作数长度不一致(或1000超出字节数据范围)

(6)CS不能做目的寄存器

(7)段寄存器只能由通用寄存器对其操作,BP不能对通用寄存器进行操作

(8)XLAT中BX是隐含操作数

(9)IN指令中16位端口地址要用DX作为操作数

(10)OUT指令两个操作数反了

3.按要求编写下面的程序段

1)利用移位指令计算DX=3×AX+7×BX,假设为无符号数运算,无进位。

2)用逻辑运算指令实现数字0~9的ASCII码与非压缩BCD码的互相转换

3)把DX.AX中的双字右移4位

4)假设从4A00H:

0000开始的4个字节中存放了4个非压缩的BCD码,现在按照低地址对低位,高地址对高位的原则,将他们合并到DX中。

答:

1)MOVCX,AX

SHLAX,1;AX*2

ADDAX,CX;AX*3

MOVDX,BX

MOVCL,3

SHLDX,CL;BX*8

SUBDX,BX;BX*7

ADDDX,AX

2)MOVAL,’0’

LOP:

ANDAL,0FH

INCAL

CMPAL,‘:

JNELOP

MOVAL,0

LOP1:

ORAL,30H

INCAL

CMPAL,0AH

JNELOP1

3)MOVCL,4

SHRAX,CL

MOVBL,DL

SHRDX,CL

SHLBL,CL

ORAH,BL

4)MOVAX,4A00H

MOVDS,AX

MOVCL,4

MOVSI,0

MOVAL,[SI]

ANDAL,0FH

MOVDL,AL

INCSI

MOVAL,[SI]

SHLAL,CL

ORDL,AL

INCSI

MOVAL,[SI]

ANDAL,0FH

MOVDH,AL

INCSI

MOVAL,[SI]

SHLAL,CL

ORDH,AL

4.请说明下面两段程序的功能

1)movsi,600h

movdi,601h

movax,ds

moves,ax

movcx,256

std

repmovsb

2)cld

movax,0fefh

movcx,5

movbx,3000h

moves,bx

movdi,2000h

repstosw

答:

1)从DS:

600H开始将向低地址方向的256字节向高地址移动一个字节位置。

2)从3000:

2000h开始连续存放5个0fefh

5.假设DS=2000H.BX=1256H,SI=528FH,位移量TABLE=20A1H,[232F7H]=3280H,[264E5H]=2450H,试问执行下列段内间接寻址的转移指令后,转移到有效地址是什么?

i.JMPBX

ii.JMPTABLE[BX]

iii.JMP[BX][SI]

答:

(1)1256H

(2)3280H(3)2450H

6.判断下列程序段跳转到条件

(1)XORAX,1E1EH

JEEQUAL

(2)TESTAL,10000001B

JNZTHERE

(3)CMPCX,64H

JBTHERE

答:

(1)(AX)=1E1EH

(2)(AL)的最高位和/或最低位为1(3)(CX)<64H

7.如果条件跳转指令的跳转目标范围超出-128~127的范围,该如何处理?

举例说明。

答:

可以把跳转条件做一些调整,利用无条件跳转的跳转范围大,来达到目的,如:

CMPAX,33

JELONG

……;大于127字节

LONG:

改为:

CMPAX,33

JNESHOETER

JMPLONG

SHORTER:

……;大于127字节

……

LONG:

8.按要求编写下面的程序段

1)当DX高4位全为0时,使AX=0,否则AX=-1。

2)已知字符串string包含有256BYTE的内容,将其中所有的‘$’符号替换成空格(‘’)。

3)所谓回文字符串是指一个字符串正读和倒读都是一样的,例如字符串‘ABCDEFFEDCBA’就是一个回文字符串,而字符串‘ABCFDDCAB’就不是回文字符串。

现在有一个字符串string,包含有16个字节的内容,请编写程序段,判断该字符串是否为回文字符串。

4)统计以‘$’字符结束的字符串string的字符个数。

答:

1)

TESTDX,0F0H

JZOK1

XORAX,AX

JMPOK2

OK1:

MOVAX,-1

Ok2:

2)

MOVCX,256

MOVAL,‘$’

MOVAH,‘’

LEABX,string

LP:

CMP[BX],AL

JNZNEXT

MOV[BX],AH

NEXT:

INCBX

DECCX

JNZLP

3)

LEASI,string

MOVDI,15

ADDDI,SI

LP:

MOVAL,[SI]

CMPAL,[DI]

JNZNO;不是回文

INCSI

DECDI

CMPSI,DI

JBLP

……;是回文

NO:

……;不是回文

4)

MOVCX,0;放字符个数

LEASI,string

LP:

MOVAL,[SI]

CMPAL,’$’

JEEXIT

INCSI

INCCX

JMPLP

EXIT:

9.设置CX=0,则LOOP指令将执行多少次?

例如:

movcx,0

delay:

loopdelay

答:

将执行65536次

10.在下面程序段的括号中如果分别放上下面的指令

(1)LOOPL20

(2)LOOPNEL20

(3)LOOPEL20

试说明,当程序执行完时AX,BX,CX,DX四个寄存器的内容分别是什么?

MOVAX,01

MOVBX,02

MOVCX,03

MOVDX,04

L20:

INCAX

ADDBX,AX

SHRDX,1

()

RET

答:

(1)(AX)=4,(BX)=11,(CX)=0,(DX)=0

(2)(AX)=4,(BX)=11,(CX)=0,(DX)=0

(3)(AX)=2,(BX)=4,(CX)=2,(DX)=2

11.下面两条短转移指令的转移地址A10和A20分别是多少?

(用16进制来表示)

(1)0110EBF7JMPA10

(2)0110EB09JMPA20

指令地址(16进制)指令码汇编语句

答:

(1)A10=0109H

(2)A20=011BH

12.按要求编写下面的程序段

1)将ELEMS中的100个字节数据的位置颠倒过来(即第一个字节和第100个字节的内容交换,第二个字节和第99个字节的内容交换……)。

2)有两个3位的ASCII码字串ASC1和ASC2定义如下:

ASC1DB‘578’

ASC2DB‘694’

ASC3DB‘0000’

请编写计算ASC3=ASC1+ASC2的程序段。

3)编写四字节ASCII码串‘3785’与ASCII数码‘5’相乘的程序段。

答:

1)

LEASI,ELEMS

MOVDI,SI

ADDDI,99

MOVCX,50

LP:

MOVAL,[SI]

XCHGAL,[DI]

XCHGAL,[SI]

INCSI

DECDI

DECCX

JNZLP

2)

CLC;清CF

PUSHF

LEASI,ASC1+2;从个位开始加,DB'578'等同于DB'5','7','8'

LEADI,ASC2+2

LEABX,ASC3+3

MOVCX,3;计算的数有位

A20:

MOVAH,0

MOVAL,[SI]

SUBAL,30H;;ASCII码转BCD码

MOVDL,[DI]

SUBDL,30H;ASCII码转BCD码

POPF

ADCAL,DL

AAA;非压缩BCD码加法调整

PUSHF

ADDAL,30H;BCD码转ASCII码

MOV[BX],AL

DECSI

DECDI

DECBX

LOOPA20

POPF

ADDAH,30H

MOV[BX],AH

3)

MOVCX,4

LEASI,MULCND+3

LEADI,PRODUCT+4

ANDMULPLR,0FH;ASCII码转BCD码

A30:

MOVAL,[SI]

ANDAL,0FH;ASCII码转BCD码

MULMULPLR

AAM;BCD码乘调整

ADDAL,[DI]

AAA;BCD码加法调整

ORAL,30H

MOV[DI],AL

DECDI

MOV[DI],AH

DECSI

LOOPA30

ORBYTEPTR[DI],30H

13.请编写完整程序在一个升序字节数组中查找数N,找到后将此数从数组中删除,并使得CF=0;没找到返回CF=1。

数组的首地址和末地址为A_HEAD和A_END。

答:

DATASEGMENTPARA'DATA'

A_HEADDW?

BUFFDB1,2,3,4,5,6,7,8,9,0

COUNTEQU$-BUFF

A_ENDDW?

NDB4

DATAENDS

CODESEGMENTPARA'CODE'

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVSI,OFFSETBUFF

MOVA_HEAD,SI

MOVAL,COUNT

CBW

ADDAX,SI

MOVDI,AX

DECDI

MOVA_END,DI

MOVAL,N

LP:

CMPAL,[SI]

JNENEXT

JMPDEL

NEXT:

INCSI;考察下一个数据

CMPSI,DI

JBELP;循环

STC;CF<-1

JMPEXIT

DEL:

CLC;CF<-0

CMPSI,DI

JNEDELDATA

DECA_END;删除的是最后一个元素

JMPEXIT

DELDATA:

MOVCX,DI

SUBCX,SI

LP2:

MOVAL,[SI+1];该循环将SI+1到DI位置的数据移动到SI到DI-1的位置

MOV[SI],AL

INCSI

LOOPLP2

DECA_END;调整结尾指针

EXIT:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

14.请编写完整程序从键盘读取字符,如果是十进制的‘0’~‘9’则在屏幕上输出该数的8位二进制码,并将数字依次存放到BUF开头的数组中,如果读入的字符是’Q’或者‘q’,则程序退出,其他情况在屏幕上打印“Youmustinput0~9,or‘q’or‘Q’”。

(如输入的字符是‘9’,则输出“00001001”)

提示:

语句“Youmustinput0~9,or‘q’or‘Q’”定义成以’$’结尾的字符串,键盘输入和屏幕输出,请参看教材后的DOS功能调用(int21h)的相关功能。

输出一个数的2进制形式应该从最高位开始输出,可以将此段程序定义成一个过程。

答:

;'"Youmustinput0~9,or'q'or'Q'"。

DATASEGMENTPARA'DATA'

sentencedb'Youmustinput0~9,or"q"or"Q\"','$'

bufdb20dup(?

DATAENDS

CODESEGMENTPARA'CODE'

ASSUMECS:

CODE,DS:

DATA

MAINPROCFAR

PUSHDS

MOVAX,0

PUSHAX

MOVAX,DATA

MOVDS,AX

MOVSI,0

DOIT:

MOVAH,1

INT21H

CMPAL,'Q'

JNENEXT

JMPEXIT

NEXT:

CMPAL,'q'

JNENEXT1

JMPEXIT

NEXT1:

SUBAL,30H

JCPRINT

JMPNEXT2

PRINT:

MOVAH,9

LEADX,SENTENCE

INT21H

CALLCRLF

JMPDOIT

NEXT2:

CMPAL,9

JGPRINT

MOVCX,8

CALLCRLF

PRNDATA:

SHLAL,1

JCIS1

MOVDL,'0'

JMPOUTBIN

IS1:

MOVDL,'1'

OUTBIN:

PUSHAX

MOVAH,2

INT21H

POPAX

LOOPPRNDATA

CALLCRLF

JMPDOIT

EXIT:

RET

MAINENDP

CRLFPROCNEAR;回车换行

PUSHAX

PUSHDX

MOVDL,0DH;回车

MOVAH,2

INT21H;输出DL中的字符

MOVDL,0AH;换行

MOVAH,2

INT21H;输出DL中的字符

POPDX

POPAX

RET

CRLFENDP

CODEENDS

ENDMAIN

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2