汇编语言课后习题答案-郑晓薇(整理后的)_第1页
汇编语言课后习题答案-郑晓薇(整理后的)_第2页
汇编语言课后习题答案-郑晓薇(整理后的)_第3页
汇编语言课后习题答案-郑晓薇(整理后的)_第4页
汇编语言课后习题答案-郑晓薇(整理后的)_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

千里之行,始于足下让知识带有温度。第第2页/共2页精品文档推荐汇编语言课后习题答案郑晓薇(整理后的)习题一

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

2

5E8AH,0BE6H,3DEH,4940H

3

00011101+00110101=01010010=52H=8201001001+11101000=00110001=31H=4910111110+01010010=00010000=10H=1610011010+11110001=10001011=8BH=-1174

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

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

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

10010+01110101=00111+00000110

=00111=0207H=207

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

6无符号数:0~65535,0000H~FFFFH;带符号数:-32768~+32767,8000H~7FFFH

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码

8

(1)108=01101100B=6CH,补码01101100B,压缩BCD码01000,ASCII码313038H(2)46=00101110B=2EH,补码00101110B,压缩BCD码01000110,ASCII码3436H(3)–15=11110001B=F1H,补码11110001B,ASCII码2D3135H

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

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

10

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

习题二

9最少划分为16个规律段,最多划分为65536个规律段(每段16个字节)

10CS:IP,DS:BX、SI、DI,ES:BX、SI、DI,SS:SP、BP

11字节单元保存8位数,字单元保存16位数。按照源操作数的属性确定要拜访的是字节单元还是字单元。

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

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

16(1)物理地址=27679H(2)物理地址=20F92H(3)物理地址=20F92H

(2)和(3)的物理地址是一样的。说明规律地址不唯一,多个规律地址可对应到同一个物理单元上。

17代码段CS:IP的物理地址

=55A84H堆栈段SS:SP的物理地址=4DB65H数据段DS:BX的物理地址=17678H附加段ES:DI的物理地址=2BA41H

18当前栈指针所指单元的物理地址是1522CH。堆栈区中还能保存254个字。

19执行E200

20执行U100

21执行RCX,然后输入100

22执行EDS:0‘a’‘b’‘c’‘d’

习题三

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

7

MOVAX,[CX]错。CX不能为间址寄存器MOVAL,1200H错。立刻数超出8位寄存器

MOVAL,BX错。两个操作数不匹配

MOV[SI][DI],AX错。两个变址寄存器不能在一起

MOVES:[DX],CX错。DX不能为间址寄存器MOV[AX],VALUE错。AX不能为间址寄存器MOVCOUNT,[SI]错。两个操作数不能都是

存储单元

8

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

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

9

(1)ADDAX,[X+4]

MOVY,AX

(2)MOVBX,4

ADDAX,X[BX]

MOVY,AX

(3)MOVBX,4

MOVSI,OFFSETX

ADDAX,[BX+SI]

MOVY,AX

10立刻寻址方式中操作数(立刻数)和

指令一起存放在代码段中。

习题四10

(1)DATASEGMENT

XDW0

YDW0

DATAENDS

(2)STRINGDB’Computer’

(3)COUNTDB100DUP(?)

(4)PIEQU3.14

(5)VALUELABELBYTE

11(1)对。(2)错。260超出了字节围。(3)错。X3是字节型,1234H是字型,不匹配。

(4)对。(5)错。缺少DUP。(6)对。12(1)AL=3。(2)AX=2103H。(3)DX=TABLE的偏移地址。(4)CL=33H

(5)BX=TABLE的段地址。(6)BX=1。(7)DX=TABLE的偏移地址。

13

MOVDX,2022H

MOVAX,5D68H

MOVCX,1003H

MOVBX,49A6H

ADDAX,BX(SUBAX,BX)

ADCDX,CX(SBBDX,CX)

14SUBAX,CX

SBBDX,0

15MOVAX,extra

MOVES,AX

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

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

18从伪指令ENDSTART处获知程序从START标号开头。

19(1)减

法:

(2)加法:

MOV

AX,8576H

MOVAX,8576HMOV

BX,9988H

MOVBX,9988H

SUB

AX,BX

ADDAX,BX

结果:

AX=EBEEH结果:AX=1EFEH

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

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

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;余数保存在BHANDAX,000FH

AAA;商调节

MOVZ4,AX;保存商

23

.modelsmall

.data

buffdb?

.code

start:

movax,data

movds,ax

movah,1;键盘输入

int21h

subal,30h;去掉ASCII码movbuff,al

movah,4ch

int21h

endstart

24

.modelsmall

.code

start:

movah,1;键盘输入

int21h

subal,20h;变为大写

movdl,al

movah,2

int21h

movah,4ch

int21h

endstart

25

.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

26

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

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

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,4movbl,y

salbl,cl;16Y

addal,bl;X/4+16Y

movz,al

movah,4ch

int21h

endstart

29

.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

习题五

11进位标志CF=1

12先把AX的值除以8等于0246H,再把高12位屏蔽为0,剩下AL=06H加上30H

变为ASCII码显示出来。

13

推断X>0,是,Z=X-Y;否则Z=X的肯定值

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

段寄存器使用非法(3)立刻数使用非法(4)目的操作数不允许是立刻数(5)两个操作

数不允许都是存储单元(6)移位次数超过1要用CL表示。

15ANDAL,11011111B

16(1)AL=30H(2)AL=B7H(3)AL=C8H(4)AL=38H

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

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,AXMOVAL,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

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

程序如下:

DATA1SEGMENT

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

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

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

LEABX,BUF

LOP:MOVAH,1

INT21H

CMPAL,20H

JENEXT

MOV[BX],AL

INCBX

JMPLOP

NEXT:MOVBYTEPTR[BX],’$’

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

习题六

11累加和TOTAL=83

12循环统计X中0的个数

13

(1)将BB1:RCLAL,1改为BB1:ROLAL,1

(2)将BB2:CMP[BX],’T’

LOOPNEBB2

改为:

DECBX

BB2:INCBX

CMP[BX],’T’

LOOPNEBB2

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

16写程序段。查找CATT表中的字符””,找到后将SIGN单元置1,否则SIGN单元置0。

cattdb'asdddd'

signdb?

……

movax,extra

moves,ax

movsign,0

moval,''

leadi,catt

cld

movcx,7

repnzscasb

jcxznee

movsign,1

nee:movah,4ch

int21h

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

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

19

datasegment

bunch1db'stadent'

bunch2db'studEnt'

dataends

codesegment

assumecs:code,ds:data,es:datastart:

movax,data

movds,ax

moves,ax

leasi,bunch1

leadi,bunch2

movbx,0;bh=相同的个数,bl=不同的个数movcx,7

let1:

moval,[si]

cmpal,[di];两字符比较

jzequl;相同转equl

incbl;不同bl加1

jmpout1

equl:incbhout1:incsi

incdi

looplet1

movdl,'n';显示'n',代表不同movah,2h

int21h

addbl,30h;加上ASCII码movdl,bl;显示不同的个数

int21h

movdl,'e';显示'e',代表相同int21h

addbh,30h

movdl,bh;显示相同的个数

int21h

movah,4ch

int21h

codeends

endstart

21

DATASEGMENT

STRDB‘SDABFGH0’

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATASTART:MOVAX,DATA

MOVDS,AX

LEADI,STR

SPACE:MOVCX,10

MOVAL,[DI]

CMPAL,0

JEOUT

CMPAL,20H

JEDELETE

JMPEXIT

SUBCX,DI

MOVSI,DI

DELETE:

MOVBL,[SI+1]

MOV[SI],BL

INCSI

LOOPDELETE

EXIT:JMPSPACE

OUT:MOVAH,4CH

INT21H

CODEENDS

ENDSTART

23设计思路:

(1)用EQU伪指令获得需转换的十进制数的个数;

(2)用双重循环。外循环控制个数,用x作为中间变量;

(3)循环将一个3位十进制数去掉ASCII码后按位数扩大10倍再相加,保存后即存储为二进制数;

(4)分两个数组保存ASCII码表示的十进制数和转换后的二进制数。

程序如下:

;6-23.asm将存中用ASCII码表示的100以的十进制数改变为二进制数

datasegment

score1db

36h,37h,20h,31h,30h,30h,38h,35h,20h,31h,30h,30h;即67,100,85,100

xdw?

nequ3;三位数

numequ(x-score1)/n;十进制数个数score2dwnumdup(0);保存转换后的二进制数

dataends

codesegment

assumecs:code,ds:data

start:movax,data

movds,ax

movcx,num

movsi,-2

movbx,0

rept1:pushcx;保存外循环次数

movcx,n

rept2:moval,score1[bx];从score1取数

cmpal,30h;推断是否0-9

jlexit

cmpal,39h

jgexit

andax,000fh;去掉ASCII码

xchgax,x

movdx,10;将ax中前一次形成的数扩大10倍

muldx

xchgax,x

addx,ax;相加后保存到x

exit:incbx;取下一位数

looprept2

popcx;弹出外循环次数

addsi,2

movax,x

movscore2[si],ax;转换后的数据保存到score2

movx,0

looprept1

movah,4ch

int21h

codeends

endstart

习题七

12功能:两个字节数相加。X和BL相加保存到Y。

13功能:键盘输入的字符保存到KEY单元中,直到按回车为止。

14功能:将X单元中的十六进制3AH变为十进制入栈保存,AH中为余数。先将0008H入栈,再将0005H入栈,结果为58。

16

PUSHAX

PUSHBX

MOVBX,0

LET1:MOVAH,1

INT21H

CMPAL,0DH;输入回车退出

JZEXIT

MOVBUFFER[BX],AL;保存到BUFFER

INCBX

JMPLET1

EXIT:POPBX

POPAX

RET

KEY_INENDP

17

KEY_IN_DECPROC

PUSHAX

PUSHBX

MOVX,0

MOVBX,0

MOVSI,0

LET1:MOVAH,1

INT21H

CMPAL,0DH;输入回车退出

JZEXIT

MOVBUFFER[SI],AL;保存到BUFFERINCSI

JMPLET1

EXIT:MOVCX,SI;位数放在CXMOVSI,0

LET2:MOVAL,BUFFER[SI]

SUBAL,30H

MOVAH,0

XCHGAX,X;形成十进制数

MOVBX,10

MULBX

XCHGAX,X

ADDX,AX;保存

INCSI

LOOPLET2

POPBX

POPAX

RET

KEY_IN_DECENDP

23

calcuproc

pushax

pushbx

pushsi

movax,0

moval,x

andal,al

jnszz

negal

movfuhao,'-'

zz:

movsi,0

movbx,10;将ax变为十进制数真值let1:

movdx,0

incsi;统计余数个数

idivbxmovy[si],dx;在y单元保存余数cmpax,0

jnzlet1

popsi

popbx

popax

ret

calcu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论