汇编语言习题测验题答案.docx

上传人:b****6 文档编号:6570216 上传时间:2023-01-08 格式:DOCX 页数:37 大小:36.13KB
下载 相关 举报
汇编语言习题测验题答案.docx_第1页
第1页 / 共37页
汇编语言习题测验题答案.docx_第2页
第2页 / 共37页
汇编语言习题测验题答案.docx_第3页
第3页 / 共37页
汇编语言习题测验题答案.docx_第4页
第4页 / 共37页
汇编语言习题测验题答案.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

汇编语言习题测验题答案.docx

《汇编语言习题测验题答案.docx》由会员分享,可在线阅读,更多相关《汇编语言习题测验题答案.docx(37页珍藏版)》请在冰豆网上搜索。

汇编语言习题测验题答案.docx

汇编语言习题测验题答案

汇编语言各章习题、测试题答案

习题一答案:

1.1无符号数:

11010011=211=D3H,01110111=119=77H,10000011=131=83H,

00101111=47=2FH,10101010=170=AAH

带符号数:

11010011=-45=D3H,01110111=+119=77H,10000011=-125=83H,

00101111=+47=2FH,10101010=-86=AAH

1.25E8AH,0BE6H,3DEH,4940H

1.300011101+00110101=01010010=52H=82

01001001+11101000=00110001=31H=49

10111110+01010010=00010000=10H=16

10011010+11110001=10001011=8BH=-117

1.400101001+01010011=01111100+00000110=10000010=82H=82

01110011-00100100=01001111-00000110=01001001=49H=49

01100110+00011000=01111110+00000110=10000100=84H=84

0000000100110010+01110101=0000000110100111+00000110

=0000001000000111=0207H=207

1.5000020A3H,FF94H,00003456H,007FH,FFFFEC00H

1.6无符号数:

0~65535,0000H~FFFFH;带符号数:

-32768~+32767,8000H~7FFFH

1.7

(1)38H等于十进制数56,是十进制数56的补码,数字8的ASCII码,十进制数38的压缩BCD码

(2)FFH等于十进制数-1,是带符号数-1的补码,无符号数为255

(3)5AH等于十进制数90,是十进制数90的补码,大写字母Z的ASCII码

(4)0DH等于十进制数13,是十进制数13的补码,回车符的ASCII码

1.8

(1)108=01101100B=6CH,补码01101100B,压缩BCD码0000000100001000,ASCII码313038H

(2)46=00101110B=2EH,补码00101110B,压缩BCD码01000110,ASCII码3436H

(3)–15=11110001B=F1H,补码11110001B,ASCII码2D3135H

(4)254=0000000011111110B=00FEH,补码0000000011111110B,压缩BCD码0000001001010100,ASCII码323534H

1.9

(1)56+63=01110111B,CF=0,SF=0,ZF=0,OF=0

(2)83-45=00100110B,CF=0,SF=0,ZF=0,OF=0

(3)-74+29=11010011B,CF=0,SF=1,ZF=0,OF=0

(4)-92-37=01111111B,CF=1,SF=0,ZF=0,OF=1

1.10回车、换行、响铃、ESC键、空格键、@、P、p

习题二答案:

2.9最少划分为16个逻辑段,最多划分为65536个逻辑段(每段16个字节)

2.10CS:

IP,DS:

BX、SI、DI,ES:

BX、SI、DI,SS:

SP、BP

2.11字节单元保存8位数,字单元保存16位数。

根据源操作数的属性确定要访问的是字节单元还是字单元。

2.12对于字节单元来说,偶地址和奇地址一样;对于字单元而言,最好用偶地址保存,可减少CPU的访存次数。

2.13首单元的物理地址=38AE8H,末单元的物理地址=38AE8H+7FFFH=40AE7H

2.16

(1)物理地址=27679H

(2)物理地址=20F92H(3)物理地址=20F92H

(2)和(3)的物理地址是一样的。

说明逻辑地址不唯一,多个逻辑地址可对应到同一个物理单元上。

2.17代码段CS:

IP的物理地址=55A84H堆栈段SS:

SP的物理地址=4DB65H

数据段DS:

BX的物理地址=17678H附加段ES:

DI的物理地址=2BA41H

2.18当前栈指针所指单元的物理地址是1522CH。

堆栈区中还能保存254个字。

2.19执行E200

2.20执行U100

2.21执行RCX,然后输入100

2.22执行EDS:

0‘a’‘b’‘c’‘d’

习题三答案:

3.3MOVAX,BX源操作数为寄存器寻址,EA无,物理地址无

MOVAX,1290H立即寻址,EA无,物理地址无

MOVAX,[BX]寄存器间接寻址,EA=1290H,物理地址=2FBB0H

MOVAX,DS:

[1290H]直接寻址,EA=1290H,物理地址=2FBB0H

MOVAX,[BP]寄存器间接寻址,EA=6756H,物理地址=26A56H

MOV[DI][BX],AX目的操作数为基址变址寻址,EA=3C06H,物理地址=32526H

MOVES:

[SI],AX寄存器间接寻址,EA=348AH,物理地址=50CAAH

3.7MOVAX,[CX]错。

CX不能为间址寄存器

MOVAL,1200H错。

立即数超出8位寄存器范围

MOVAL,BX错。

两个操作数不匹配

MOV[SI][DI],AX错。

两个变址寄存器不能在一起

MOVES:

[DX],CX错。

DX不能为间址寄存器

MOV[AX],VALUE错。

AX不能为间址寄存器

MOVCOUNT,[SI]错。

两个操作数不能都是存储单元

3.8

(1)MOVAX,BX

(2)MOVCL,15(3)ADDAX,[BX]

(4)MOV[BX+SI],AL(5)MOVAX,VALUE[SI](6)SUBAX,DS:

[2000H]

3.9

(1)ADDAX,[X+4]

(2)MOVBX,4(3)MOVBX,4

MOVY,AXADDAX,X[BX]MOVSI,OFFSETX

MOVY,AXADDAX,[BX+SI]

MOVY,AX

3.10立即寻址方式中操作数(立即数)和指令一起存放在代码段中。

习题四答案:

4.10

(1)DATASEGMENT

XDW0

YDW0

DATAENDS

(2)STRINGDB’Computer’

(3)COUNTDB100DUP(?

(4)PIEQU3.14

(5)VALUELABELBYTE

4.11

(1)对。

(2)错。

260超出了字节范围。

(3)错。

X3是字节型,1234H是字型,不匹配。

(4)对。

(5)错。

缺少DUP。

(6)对。

4.12

(1)AL=3。

(2)AX=2103H。

(3)DX=TABLE的偏移地址。

(4)CL=33H

(5)BX=TABLE的段地址。

(6)BX=1。

(7)DX=TABLE的偏移地址。

4.13MOVDX,2012H

MOVAX,5D68H

MOVCX,1003H

MOVBX,49A6H

ADDAX,BX(SUBAX,BX)

ADCDX,CX(SBBDX,CX)

4.14SUBAX,CX

SBBDX,0

4.15MOVAX,extra

MOVES,AX

4.16

(1)MOVAL,16

ADDAL,X

MOVBL,5

IMULBL

MOVZ,AX

(2)MOVBL,4

MOVAL,X

IDIVBL

SUBAL,Y

MOVZ,AX

(3)MOVAL,X

MOVBL,8

IMULBL

MOVDX,AX

MOVAH,0

MOVAL,Y

MOVBL,16

IDIVBL

CBW

ADDDX,AX

MOVAH,0

MOVAL,W

IMULAL

SUBDX,AX

MOVZ,DX

(4)MOVAL,X

ADDAL,Y

MOVBL,X

SUBBL,Y

MOVAH,0

IMULBL

MOVZ,AX

MOVAL,X

IDIVY

CBW

SUBZ,AX

4.17Z=(5+22-15)*14=168

4.18从伪指令ENDSTART处获知程序从START标号开始。

4.19

(1)减法:

(2)加法:

MOVAX,8576HMOVAX,8576H

MOVBX,9988HMOVBX,9988H

SUBAX,BXADDAX,BX

结果:

AX=EBEEH结果:

AX=1EFEH

CF=1,OF=0,ZF=0,SF=1CF=1,OF=1,ZF=0,SF=0

4.21

(1)MOVAL,56H

MOVBL,34H

ADDAL,BL

DAA

MOVY1,AL

(2)MOVAX,128H

MOVBX,35H

SUBAX,BX

DAS

MOVY2,AL

(3)MOVAL,68H

MOVBL,23H

ADDAL,BL

MOVBL,45H

SUBAL,BL

DAS

MOVY3,AL

4.22

(1)MOVAX,0708H

MOVBX,0406H

ADDAL,BL

ADDAH,BH;不用带进位加

AAA;加法调整,含进位调整

MOVBX,AX

XCHGAH,AL;高4位调整

AAA

MOVBH,AL

MOVZ1,BX;保存十位、各位,百位在CF中

(2)MOVAX,0905H

MOVBX,0207H

SUBAL,BL

SUBAH,BH;不用带借位减

AAS;减法调整

MOVZ2,AX

(3)MOVAX,0102H

MOVBX,0006H

MULBX;乘法先不用调整

MOVBX,0303H

SUBAX,BX

AAS;减法调整

MOVZ3,AX

(4)MOVAX,0704H

MOVBX,0108H

ADDAL,BL

ADDAH,BH

AAA;加法调整

MOVBL,6

AAD;除法调整

DIVBL

MOVBH,AH;余数保存在BH

ANDAX,000FH

AAA;商调整

MOVZ4,AX;保存商

4.23编程序。

从键盘输入一个数字,去掉ASCII码后保存到BUFF单元。

.modelsmall

.data

buffdb?

.code

start:

movax,@data

movds,ax

movah,1;键盘输入

int21h

subal,30h;去掉ASCII码

movbuff,al

movah,4ch

int21h

endstart

4.24编程序。

将键盘输入的小写字母变为大写字母显示在屏幕上。

.modelsmall

.code

start:

movah,1;键盘输入

int21h

subal,20h;变为大写

movdl,al

movah,2

int21h

movah,4ch

int21h

endstart

4.25X和Y都是字节型数据,编写将两数相加的结果显示出来的程序段。

.modelsmall

.data

xdb12h

ydb34h

.code

start:

movax,@data

movds,ax

moval,x

addal,y;结果为46H

movah,al;AH=46H

andal,0fh;AL=06H

movcl,4

rolah,cl;AH=64H

andah,0fh;AH=04H

addax,3030h;AX=3436H

movbx,ax

movdl,bh;显示4

movah,2

int21h

movdl,bl;显示6

int21h

movah,4ch

int21h

endstart

4.26编写程序,建立一个0~9的平方根表,查表可得某数的平方根。

datasegment

xdb'0.000','1.000','1.414','1.732','2.000'

db'2.236','2.449','2.646','2.828','3.000';建立字符表

ydb5dup(?

);存放查到平方根

udb3;要查的数

dataends

codesegment

assumecs:

code,ds:

data

start:

movax,data

movds,ax

moval,u;要查的数

movcl,5

mulcl;u*5=15(号单元开始)

movah,0

movbx,ax;地址保存到bx

movsi,0

let1:

moval,x[bx];取出平方根数字

movy[si],al;存入y

incsi

incbx

looplet1;循环取出5次

movah,4ch

int21h

codeends

endstart

4.27编写查表程序。

建立一个班级姓名表,给出学号,可显示出其姓名。

.modelsmall

.data

x1db'zhangyan$';姓名为10个字符宽度

x2db'lili$'

x3db'wanglan$'

x4db'zhaoxue$'

x5db'lijiang$'

udb3;要查的学号

.code

start:

movax,@data

movds,ax

moval,u;给出学号

movcl,10

mulcl;u*10=30(号单元开始)

movah,0

movdx,ax;地址保存到dx

movah,9;9号功能显示字符串

int21h

movah,4ch

int21h

endstart

4.28编程实现公式计算Z=X/4+16Y。

.modelsmall

.data

xdb4

ydb6

zdb?

.code

start:

movax,@data

movds,ax

moval,x;

movcl,2

saral,cl;X/4

movcl,4

movbl,y

salbl,cl;16Y

addal,bl;X/4+16Y

movz,al

movah,4ch

int21h

endstart

4.29编写程序段,将AL中的数乘以6,与CL相减后再除以3;把商保存到Y单元,余数保存到Y+1单元。

.modelsmall

.data

ydb?

?

.code

start:

movax,@data

movds,ax

moval,3;设al=3

movcl,6

mulcl;al*6

movcl,4;设cl=4

subal,cl;相减

movbl,3

idivbl;/3

movy,al;商

movy+1,ah;余数

movah,4ch

int21h

endstart

习题五答案:

5.11进位标志CF=1

5.12先把AX的值除以8等于0246H,再把高12位屏蔽为0,剩下AL=06H加上30H变为ASCII码显示出来。

5.13判断X>0,是,Z=X-Y;否则Z=X的绝对值

5.14

(1)目的操作数是存储单元时,要用PTR伪操作指出单元的属性。

(2)DS段寄存器使用非法

(3)立即数使用非法。

(4)目的操作数不允许是立即数

(5)两个操作数不允许都是存储单元

(6)移位次数超过1要用CL表示。

5.15ANDAL,11011111B

5.16

(1)AL=30H

(2)AL=B7H(3)AL=C8H(4)AL=38H

5.27分支程序设计。

完成如下公式的计算,请写出程序。

(X+3)/2X>0

Y=0X=0

X×4X<0

程序:

DATASEGMENT

XDB23

YDB?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAL,X

CMPAL,0

JESUB2

JGSUB1

MOVCL,2

SALAL,CL

JMPSHORTSUB2

SUB1:

ADDAL,3

SARAL,1

SUB2:

MOVY,AL

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

5.28设X、Y、Z为字节单元。

如果X≥0,Z=4X-Y/16,否则,Z=X的绝对值。

编程序实现。

程序如下:

DATASEGMENT

XDB3

YDB5

ZDB?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAL,X

CMPAL,0

JLSS1

MOVCL,2

SALAL,CL

MOVBL,Y

MOVCL,4

SARBL,CL

SUBAL,BL

JMPOUT1

SS1:

NEGAL

OUT1:

MOVZ,AL

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

5.29字数组M中有10个数据,分类统计其中正数、负数、0的个数,分别存入POSI、NEGA、ZERO单元。

程序如下:

DATA1SEGMENT

MDW21,-34,32,112,-324,0,76,0,48,50

POSIDW?

NEGADW?

ZERODW?

DATA1ENDS

CODE1SEGMENT

ASSUMECS:

CODE1,DS:

DATA1

START:

MOVAX,DATA1

MOVDS,AX

MOVCX,10

LEASI,M

AGAIN:

CMPWORDPTR[SI],0

JLLOWER

JEEQUAL

INCPOSI

JMPLPP1

LOWER:

INCNEGA

JMPLPP1

EQUAL:

INCZERO

LPP1:

ADDSI,2

DECCX

JNZAGAIN

MOVAH,4CH

INT21H

CODE1ENDS

ENDSTART

5.30试编写程序,从键盘接收一英文单词,以空格结束,将其存入BUF开始的存储单元中,并在最后加上字符串结束符’$’。

主要程序部分:

LEABX,BUF

LOP:

MOVAH,1

INT21H

CMPAL,20H

JENEXT

MOV[BX],AL

INCBX

JMPLOP

NEXT:

MOVBYTEPTR[BX],’$’

5.31编程。

将AX寄存器中的16位数分成4组,每组4位,从低到高分别放在AL,BL,CL,DL中。

程序段:

START:

MOVAX,1234H

MOVBX,AX

ANDAL,0FH;4

ANDBL,0F0H;3

ANDAH,0FH

MOVCL,AH;2

ANDBH,0F0H

MOVDL,BH;1

习题六答案:

6.11累加和TOTAL=83

6.12循环统计X中0的个数

6.13

(1)将BB1:

RCLAL,1改为BB1:

ROLAL,1

(2)将BB2:

CMP[BX],’T’

LOOPNEBB2

改为:

DECBX

BB2:

INCBX

CMP[BX],’T’

LOOPNEBB2

6.15计算Y=1×2+3×4+5×6+7×8+9×10的程序段答案:

MOVAL,1

MOVBL,2

MOVDX,0

MOVCX,5

AA1:

MULBL

ADDDX,AX

INCBL

MOVAL,BL

INCBL

LOOPAA1

6.16写程序段。

查找CATT表中的字符”@”,找到后将SIGN单元置1,否则SIGN单元置0。

cattdb'asd@ddd'

signdb?

……

movax,extra

moves,ax

movsign,0

moval,'@'

leadi,catt

cld

movcx,7

repnzscasb

jcxznee

movsign,1

nee:

movah,4ch

int21h

 

6.17写程序段。

在长度为N的字数组VALUE中统计负数的个数并保存到AX中。

valuedw2,-4,-5,3,6,6,-8

nequ($-value)/2;元素个数

……

start:

movax,data

movds,ax

movcx,n

movbx,0

movax,0

rept1:

movsi,value[bx];取出元素

cmpsi,0

jgelet1;≥0转let1

incax;为负数,ax加1

let1:

addbx,2

looprept1

6.18从键盘输入一个数字,在屏幕上显示出以该数字开始10个数字串。

CODESEGMENT

ASSUMECS:

CODE

START:

MOVAH,1

INT21H

MOVCX,10

MOVBL,AL

REPT1:

CMPBL,'9'

JLENEXT

SUBBL,10

NEXT:

MOVDL,BL

MOVAH,2

INT21H

INCBL

LOOPREPT1

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

6.19编程。

比较两个字符串是否相同,统计并显示出相同的字符个数和不

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

当前位置:首页 > 幼儿教育

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

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