文档库 最新最全的文档下载
当前位置:文档库 › 有答案的汇编习题

有答案的汇编习题

1.计算机系统概述习题

1、简述计算机系统的构成。(1.1)

2、试述汇编语言的特点。(1.1)

3、将下列十进制数转换为二进制数和十六进制数。(1.2.1)

(1)369 (2)10000 (3)4095 (4)32767

4、将下列二进制数转换为十六进制数和十进制数。(1.2.1)

(1)101101 (2)10000000 (3)1111111111111111 (4)11111111

5、将下列十六进制数转换为二进制数和十进制数。(1.2.1)

(1)FA (2)5B (3)FFFE (4)1234

6、试分别判断下列各组数据中哪个数据最大?哪个最小?(1.2.1)

(1)A=0.101B B=0.101D C=0.101H

(2)A=1011B B=1011D C=1011H

7、将下列十进制数转换为BCD码。(1.2.2)

(1)12 (2)24 (3)68 (4)127

(5)128 (6)255 (7)1234 (8)2458

8、将下列BCD码转换为十进制数。(1.2.2)

(1)1001,0001 (2)1000,1001 (3)0011,0110 (4)1001,0000

(5)0000,1000 (6)1001,0111, (7)1000,0001 (8)0000,00010

9、请写出下列字符串的ASCII码值。(1.2.2)

For example,

This is a number 3692.

10、下列各数为用十六进制表示的8位二进制数,它们所表示的十进制数及被看作字符的ASCII码时的字符是什么?(1.2.2)

(1)4F (2)2B (3)73 (4)59

11、下列各数为十六进制表示的8位二进制数,说明当它们分别被看作是无符号数或用补码表示的带符号数时,所表示的十进制数是什么?(1.2.3)

(1)D8 (2)FF

12、现有一个二进制数10110110,若将该数分别看作是无符号数,原码表示的带符号数,补码表示的带符号数,它对应的十进制数的真值分别是多少?(1.2.3)

13、将下列十进制数分别用8位二进制数的原码、反码和补码表示。(1.2.3)

(1)0(2)-127 (3)127 (4)-57

(5)126 (6)-126 (7)68

14、计算机中有一个"0110,0001"编码,如果把它认为是无符号数,它是十进制的什么数?如果认为它是BCD码,则表示什么数?又如果它是某个ASCII码,则代表哪个字符?(1.2.3)

15、完成下列无符号二进制数的运算。(1.2.4)

(1)11,1010+1011,0111 (2)1,0010,0011,0100+1010,1111

(3)1010,1011,1100,1101-1111,1110 (4)111,1010,1011*110,1111

16、下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其结果。(1.2.4)

(1)(-85)+76 (2)85+(-76)(3)85-76 (4)85-(-76)

(5)(-85)-76 (6)-85-(-76)

17、完成下列二进制数的运算。(1.2.4)

(1)1011,1000/1001 (2)1011∧1001 (3)1011∨1001

(4)~1011 (5)1011⊕1001

18、简述Intel 80X86系列CPU体系结构发展。(1.3)

19、简述PC机最低1MB主存空间的使用情况。 (1.4)

20、列出8086寄存器时所用的DEBUG命令是什么?(1.4)

第二章8086指令系统习题

1、简述标志寄存器各个位的含义。(2.1)

2、简述8086机器代码格式。(2.2)

3、分别指出下列指令中源操作数和目的操作数的寻址方式。(2.2)

(1)MOV SI,100 (2)MOV CX,DATA[SI]

(3)MOV [SI],AX (4)PUSHF

4、假定DS=2000H,SS=1500H,SI=00A0H,BX=0100H,BP=0010H,数据变量VAL的偏移地址为0050H,请指出下列指令中源操作数字段是什么寻址方式?它的物理地址是多少?(2.2)

(1)MOV AX,100H (2)MOV AX,[100H]

(3)MOV AX,[BP] (4)MOV AX,VAL[BX][SI]

5、试分别说明下列各指令中源操作数和目的操作数使用的寻址方式。(2.2)

(1)AND AX,0FFH (2)AND BL,[0FFH] (3)MOV DS,AX

(4)CMP [SI],CX (5)MOV DS:[0FFH],CL (6)SUB [BP][SI],AH

(7)ADC AX,0ABH (8)OR DX,-35[BX][DI] (9)PUSH DS

6、给定(BX)=637DH (SI)=2A9BH 位移量D=7237H,试确定下列各种寻址方式下的有效地址是什么?(2.2) (1)直接寻址(2)使用BX的寄存器寻址(3)使用BX的间接寻址

(4)使用BX的寄存器相对寻址(5)基址变址寻址(6)相对基址变址寻址

7、指出下列指令中的错误。(2.3)

(1)MOV AH,BX (2)MOV [BX],[SI]

(3)MOV AX,[SI][DI] (4)MOV BYTE PTR[BX],1000

(5)MOV CS,AX

8、计算下列4条指令中操作数的地址并指出执行结果。(2.3)

(1) MOV 1[BX+SI],AX

(2) MOV 2[BP+SI],BX

(3) MOV 3[BX+DI],CX

(4) MOV 4[BP+DI],DX

假定执行前:

(DS)=1000H, (SS)=2000H, (BX)=300H, (BP)=400H, (SI)=50H, (DI)=60H, (AX)=12H, (CX)=13H, (DX)=15H.

9、指出下列指令的功能。(2.3)

MOV BX,OFFSET TAB

MOV AL,4

XLAT TAB

10、分别指出下列各条指令的功能。(2.3)

MOV SI,OFFSET NUM

LEA SI,NUM

MOV AX,[SI]

LEA AX,[SI]

LEA DI,4[SI]

LEA POIN,BUF

MOV POIN,OFFSET BUF

11、编指令实现两个双精度数SUB1和SUB2的减法运算,相减后结果保存在DSUB和DSUB+2的单元中。(2.4)

12、若AL=0B4H,BL=11H,指令MUL BL和指令IMUL BL分别执行后,它们的结果为何值?OF、CF为何值?(2.4)

13、写出完成下述功能的程序段。(2.4)

(1)传送25H到AL寄存器。

(2)将AL内容乘以2。

(3)传送15H到BL寄存器。

(4)AL的内容乘以BL的内容。

问最后结果AX=?

14、写出实现"4001H/4"的运算的程序段。(2.4)

15、下述程序段执行完后,AX和SI中的内容各为多少?(2.4)

MOV AL,-7

CBW

MOV SI,AX

16、阅读下列程序,写出此程序所完成的运算算式。已知符号常量A,B,C分别表示数值常量a,b,c。(2.4) MOV AX,A

IMUL B

MOV CX,AX

MOV BX,DX

MOV AX,C

CWD

ADD AX,CX

ADC DX,BX

SUB AX,70

SBB DX,0

IDIV A

MOV D,AX

MOV D+2,DX

17、编写程序段实现字节非压缩的BCD码53除以字节非压缩的BCD码3,要求商置于字节单元C中,余数置于字节单元R中。(2.4)

18、如(BCD1)=1834,(BCD2)=2789,要求执行(BCD3)<-(BCD1)+(BCD2),BCD1和BCD2均为用压缩的BCD码表示的十进制数,由于它们都是4位数,所以每个数占有2个字节,高位数占有高位字节,其存放方式为(BCD1)=34, (BCD1+1)=18

(BCD2)=89, (BCD2+1)=27。(2.4)

19、分析下面程序段中第三条语句执行后,AL中的内容是多少?(2.5)

A EQU B6H

MOV AL,0ABH

AND AL,A AND 0FDH

20、对给定字节数据,用指令序列实现下述要求:

(1)屏蔽0BFH的0、1位;

(2)将43H的第5位置1;

(3)测试40H的第0,1,2,3,5,7,位是否为0;

(4)测试AL寄存器中字节数的第2位是否为1,如为1则转NEXT执行;

(5)将11H的第0、1两位变反;

(6)测试AL寄存器内容是否与04FFH相等,若相等则转NEXT执行。(2.5)

21、将S1为起始地址的30个字符依次传送到同数据段的以S2为起始地址的一段字节存储单元中。(2.6)

22、有一段程序如下:(2.6)

MOV CX,10

LEA SI,FIRST

LEA DI,SECOND

CLD

REP MOVSB

(1)这个程序段完成什么操作?

(2)REP和MOVSB哪部分先执行?

(3)MOVSB第一次执行时,要完成什么动作?

(4)REP第一次执行时,要完成什么工作?

23、用其它指令完成和下列指令一样的功能。(2.6)

(1)REP MOVSB (2)REP STOSB

24、阅读下列程序段,指出它所完成的运算。(2.7)

CMP AX,0

JGE EXIT

NEG AX

EXIT:……

25、分析下面两条语句的功能。(2.7)

CMP AX,0

JNE T

26、编程序段计算S=2+4+6+……+200.(2.7)

27、比较AX,BX,CX中带符号数的大小,并将最大数放在AX中。试编写此程序段。(2.7)

28、编写程序段将DATA中的100个字节数据的位置颠倒过来。(2.7)

29、试编写一程序段,求符号函数SNG(X)的值。(2.7)

30、有一串L个字符的字符串存储于首地址为ASCII_STR的存储区中。如要求在字符串中查找"空格" (ASCII码为20H)字符,找到则继续执行,如未找到则转到NOT_FOUND去执行,编制实现这一要求的程序。

(2.7)

第三章汇编语言程序格式习题

1.简述汇编语言程序的两种格式。(3.1)

2.简述汇编语言程序的命令行开发过程。(

3.1)

3.简述汇编语言程序的集成化开发过程(PWB)。(3.1)

4.下面两条语句有何区别:(3.2.1)

X1 EQU 1000H

X2 = 1000H

5.指令

AND AX,OPD1 AND OPD2

中,OPD1和OPD2是两个已赋值的变量,问两个AND操作分别在什么时间进行?有什么区别?

(3.2.1)

6.下列程序完成什么工作?(3.2.2)

DATX1 DB 300 DUP(?)

DATX2 DB 100 DUP(?)

MOV CX,100

MOV BX,200

MOV SI,0

MOV DI,0

NEXT: MOV AL,DATX1[BX][SI]

MOV DATX2[DI],AL

INC SI

INC DI

LOOP NEXT

7.变量DATAX和变量DATAY的定义如下:(3.2.2)

DATAX DW 0148H

DW 2316H

DATAY DW 0237H

DW 4052H

按下述要求写出指令序列:

(1)DATAX和DATAY中的两个字数据相加,和存放在DATAY及DATAY+2中。

(2)DATAX双字除以字DATAY。

8.下列指令序列有何错误?请改正,并指出AX,AL的内容。(3.2.2)

OPER1 DB 1,2

OPER2 DW 1234H,5678H

MOV AX,OPER1+1

MOV AL,OPER2

9.单条执行如下程序,每一步有关寄存器的内容是什么?(3.2.2)

CODE SEGMENT

A D

B 1,2,3

B DB 5 DUP(4)

C DW 5,6,7

D DB 'Hello'

ASSUME CS:CODE,DS:CODE

GO: MOV AX,CODE

MOV DS,AX

MOV AX,C

MOV BX,LENGTH C

MOV BX,SIZE C

MOV BX,TYPE C

MOV BX,OFFSET C

MOV AL,LENGTH B

MOV AL,LENGTH D

MOV AL,LENGTH A

MOV AL,SIZE D

MOV AL,SIZE B

MOV AH,4CH

INT 21H

CODE ENDS

END GO

10.试列出几种方法汇编程序把5150H存入一个存储器字中。(3.2.2)

11.下面的语句中有数据0102H的字存储单元有多少?(3.2.2)

DB 10H DUP(1,2 DUP(2))

12.如要求把首地址为BLOCK的字数组的第6个字传送到DX寄存器,可用什么指令?(3.2.2)

13.下述程序段执行后,寄存器AX和BX的内容分别是多少?(3.2.2)

NUM EQU 945H

ALPH=35*27

MOV AX,ALPH LE NUM

MOV BX,ALPH GT NUM

14.下述程序段执行后,寄存器BX和CX的内容分别是多少?(3.2.2)

NUM1=20*20

NUM2 EQU 400H

REL1 DW NUM1 LE NUM2

REL2 DB NUM1 NE NUM2,NUM1 EQ NUM2

MOV BX,REL1

MOV CX,WORD PTR REL2

15.对于下面的数据定义,三条MOV指令分别汇编成什么?(可用立即数方式表示)(3.2.2)

TABLEA DW 10 DUP(?)

TABLEB DB 10 DUP(?)

TABLEC DB '1234'

.

.

MOV AX,LENGTH TABLEA

MOV BL,LENGTH TABLEB

MOV CL,LENGTH TABLEC

16.程序在数据段中定义的数组如下:(3.2.3)

NAMES DB 'TOM'

DB 20

DB 'ROSE'

DB 30

DB 'KATE'

DB 25

请指出下列指令是否正确?为什么?

(1)MOV BX,OFFSET NAMES

MOV AL,[BX+5]

(2)MOV AX,NAMES

(3)MOV AX,WORD PTR NAMES+1

(4)MOV BX,6

MOV SI,5

MOV AX,NAMES[BX][SI]

(5)MOV BX,6*2

MOV SI,5

MOV AX,OFFSET NAMES[BX][SI]

INC [AX]

(6)MOV BX,6

MOV SI,5

LEA DI,NAMES[BX][SI]

MOV AL,[DI]

17.假设数据段DSEG中的符号及数据定义如下,试写出此数据段汇编后各行语句的初始地址及其内

容。(3.2.3)

DSEG SEGMENT

JOE=100

SAM=JOE+20

S_F DB '/XYZ/',0DH,0AH

B_F DB 101B,19,'a'

.RADIX 16

BLK DB 11 DUP(' ')

EVEN

W_F1 DW '12,13D,11010B,333,SAM

.RADIX 10

W_F2 DW 15

LEN EQU $-S_F

DSEG ENDS

18.写出以下数据段中每个符号所对应的值。(3.2.3)

DATAREA SEGMENT

MAX EQU 0FFFH

VALONE EQU MAX MOD 10H

VALTWO EQU VALONE*2

BUFSIZ EQU ((VALTWO GT 10H)AND 10H)+10H

BUFFER DB BUFSIZ DUP(?)

BUFEND EQU BUFFER+BUFSIZ-1

DATAREA ENDS

19.用段伪操作定义一个数据段DATA_SEG,要求段界起始与字边界,连接时,该段将与同名逻辑段连

接成一个物理段,类别为"DATA"。(3.2.3)

20.假设程序中的数据定义如下:(3.2.3)

LNAME DB 30 DUP(?)

ADDRESS DB 30 DUP(?)

CITY DB 15 DUP(?)

CODE_LIST DB 1,7,8,3,2

(1)用一条MOV指令将LNAME的偏移地址放入AX.

(2)用一条指令将CODE_LIST的头两个字节的内容放入SI.

(3)写一条伪操作CODE_LENGTH的值CODE_LIST域的。

21.给出等值语句如下:

ALPHA EQU 100

BETA EQU 25

GAMMA EQU 2

下列表达式的值是多少?(3.2.3)

(1)ALPHA*100+BETA

(2)ALPHA MOD GAMMA+BETA

(3)(ALPHA+2)*BETA-2

(4)(BETA/3) MOD 5

(5)(ALPHA+3)*(BETA MOD GAMMA)

(6)ALPHA GE GAMMA

(7)BETA AND 7

(8)GAMMA OR 3

22.对于下列指令写出汇编后的结果。(3.2.3)

(1) ARRAY DW 1,2,3

ADD SI,TYPE ARRAY

(2) FEES DW 100 DUP(0)

MOV CX,LENGH FEES

(3)TABLE DB 'ABCD'

MOV CX,LENGH TABLE

23.指出下列伪指令表达方式的错误,并改正之。(3.3)

(1)STACK_SEG SEGMENT'STACK'

(2)SEGMENT 'CODE'

(3)MAIN_PROC PROC FAR

START:……

MAIN_PROC ENDS

END MAIN_PROC

MAIN_PROC ENDP

24.某一程序的数据段中有如下几条伪指令语句,试分析各变量的属性。(3.3)

DATA SEGMENT

DDBUF EQU THIS DWORD

BUF DB 100 DUP(?)

DWBUF EQU WORD PTR BUF

DATA ENDS

FIRST EQU THIS FAR

LEA SI,BUF

25.某程序中的数据段内容如下所示,请指出变量BUF和NUM的偏移地址为多少?(3.3)

DATA SEGMENT

ORG 10

BUF DB 'ABCD'

ORG ﹩+5

NUM DW 50

DATA ENDS

26.如数组ARRAY定义如下,试写出把数组(字数)存入CX寄存器的指令。(3.3)

ARRAY DW 1,2,3,4,5,6,7

END DW ?

27.请把40个字母a的字符串从源缓冲区传送到目的缓冲区。(3.3)

28.编一完整程序求两数14与-25和的绝对值。(3.3)

29.结构数据类型如何说明、结构变量如何定义、结构字段如何应用?(3.4)

30.记录数据类型如何说明,记录变量如何定义,WIDTH和MASK操作符是什么作用?(3.4)

第四章汇编语言程序设计习题

1.已知两个八位无符号数x和y,分别存放在BUF和BUF+1单元中,且x>y。请编程序计算x-y,结果

存回BUF单元。(4.1)

2.已知DAT单元有一数x。现要求编程将x的低四位变为1010,最高位D7置为1,其它三位不变。

(4.1)

3.已知有两个压缩BCD数BCD1和BCD2,其在内存存放形式为:

(BCD1)=34 (BCD1+1)=18

(BCD2)=89 (BCD2+1)=27

高位字节为高位数。要求编程将BCD1和BCD2相加,结果送BCD3开始的存储单元。(4.1)

4.DAT单元的内容拆成高、低各四位,然后分别存于DAT+1及DAT+2的低四位。(4.1)

5.内存某一缓冲区中存放着十个单元的BCD码,每个单元中放两位BCD码(压缩BCD码)。要求把

它们分别转换为ASCII码。高位BCD码转换后放在高地址单元。(4.1)

6.三个无符号数x,y,z,均小于255,分别存于DATA,DATA+1和DATA+2单元中。现要找出三个数

中数值大小居中的一个,并将其存入BUF单元中。(4.2)

7.已知在DAT单元内有一带符号数x。试编一程序,根据x的具体情况进行如下处理:

若x为正奇数,则将x与BUF单元内容相加;

若x为正偶数,则将x与BUF单元内容相"与";

若x为负奇数,则将x与BUF单元内容相"或";

若x为负偶数,则将x与BUF单元内容相"异或"。

以上四种情况运算的结果都送回BUF单元。零作为正偶数处理。(4.2)

8.累加器AL中有一字符,用ASCII码表示。当其为"A"时,程序转移到LPA处;如为"B",则转移到

LPB处;如为"E",则转移到LPE处,否则,均转向LPN处。(4.2)

9.在DATA单元有一个二进制数x,要求编程完成运算:(4.2)

x+1x>0

y=x x=0

x-1x<0

10.数组A和B,各有20个数据,它们均已按升序排放。现要求将这两个数组合并为一个数组C,且

要求其数据也按升序排放,试编程实现。(4.2)

11.编一程序,要求将BUF单元开始的100个存储单元全部清零。若不知所清单元长度,只知以0FFH

作为结束标志,又该如何处理?(4.3)

12.有一数据块,长度为100字节,存放于DAT开始的存储单元。要求将此数据块中的负数的个数统

计出来,并将统计结果存入MNUM单元中。(4.3)

13.有一个由八位数组成的数列,长度为三字节,存放地址始于DAT单元。求此数列的算术和并存于

BUF和BUF+1单元。已知数列之和为十六位数。(4.3)

14.从NUMB单元起有100个数,其值在0~100之间。试编程实现以下数据统计:

(1)有多少个大于等于60的数?统计结果存于COUNT单元。

(2)有多少个为100的数?统计结果存于COUNT+1单元。

(3)有多少个为0的数?统计结果存于 COUNT+2单元。

(4)当小于60的数超过十个,则结束统计,同时置COUNT单元为0FFH。(4.3)

15.将ADAT单元起的100个字节数据,传送到BDAT开始的单元中去。已知数据区无覆盖问题,要求

用三种方法实现。(4.3)

16.将BUF单元开始的50个字节数,区分出奇、偶数。将奇数在前,偶数在后,仍存回原数据区。(4.3)

17.对A址起的30个字节长的字符串,删除其中的数字符,后续字符向前递补,剩余字符补空格字符,

编程实现。(4.3)

18.已知有三个八位无符号数x,y,z,分别存放于NUMB,NUMB+1和NUMB+2单元。要求编一程序实现

2x+3y+5z,并要求将运算结果送RES单元和RES+1单元。(4.4)

19.将两个八位无符号数乘法的程序编为一个子程序。被乘数、乘数和乘积存放于自NUB开始的四个

存储单元中。(4.4)

20.将CSTRN起的50个字符的串,统计相同字符的字符数,找出相同字符数最多字符,存于CMORE单

元中。(4.4)

21.宏定义体内不仅可以使用宏调用,也可以包含宏定义。以下宏定义:

其中MACNAM是内层的宏定义名,但又是外层宏定义的哑元,当调用DEFMAC时,就形成一个宏定义。写出宏调用:

DEFMAC ADDITION,ADD的宏展开。(4.5)

22.用宏定义及重复伪操作把TAB,TAB+1,TAB+2,……,TAB+16的内容存入堆栈。(4.5)

23.要求建立一个100D字的数组,其中每个字的内容是下一个字的地址,而最后一个字的内容是第一

个字的地址。(4.5)

24.试定义宏指令MAX把三个变元中的最大值放在AX中,而且使变元数不同时产生不同的程序段。

(4.5)

25.编一个程序模块完成轮流查询三个数据输入设备的功能。(4.6)

第五章32位指令及其编程习题

1.试述什么是实模式、保护模式和虚拟8086方式?(5.1.1)

2.在以BP、EBP、ESP作为基址寄存器访问存储器操作数时,其默认的段寄存器是______;但是,通

常ESP作为________,不应该将它用于其他目的。(5.1.1)

3.为什么说32位通用寄存器比16位通用寄存器更通用?(5.1.1)

4.32位指令新增了哪些超越指令前缀,代码为66H和67H的超越前缀是什么作用?(

5.1.1)

5.试述32位x86 CPU的标志寄存器EFLAGS相对于原来的16位FLAGS寄存器新增那些标志位,其说

明其含义。(5.1.1)

6.试述16位存储器寻址与32位存储器寻址在计算有效地址上有哪些不同。(5.1.2)

7.指出下列传送指令中源操作数的寻址方式。(5.1.2)

(1) MOV EBX,77665544H

(2) MOV EAX,[5678H]

(3) MOV EAX,[EBX+ESI+80H]

(4) MOV EAX,[ESI*2]

(5) MOV EAX,[EBX+ESI*8+80H]

8.8086/8088处理器和80286后的处理器在对PUSH指令的处理上有什么不同?(5.2.1)

9.试用一条LEA指令实现如下运算操作:

EAX<--EBX+ESI*2+1234H

能够保证该运算正确的条件是什么?(5.2.1)

10.写指令从端口03FCH送一个双字到EAX寄存器。(5.2.1)

11.说明下列指令的操作。(5.2.1)

(1) PUSH [BX]

(2) PUSHAD

(3) PUSH 4

(4) POP ESI

12.假设(EAX)= 00001000H,(EBX)= 00002000H,试问下列指令访问内存的有效地址是什么?(5.2.1)

(1) MOV ECX,[EAX+EBX]

(2) MOV [EAX+2*EBX],CL

(3) MOV DH,[EBX+4*EAX+1000H]

13.说明下面两条指令是否正确。(5.2.2)

(1) ADD ECX,AX

(2) MOV AX,[EBX,ECX]

14.说明指令IMUL BX,DX,100H完成的操作。(5.2.2)

15.写一个程序段,求EAX、EBX、ECX的和。若有进位则将1存入EDX;否则EDX存入0,EAX为累加

和。(5.2.2)

16.指出下列指令序列执行完后目的寄存器的内容。(5.2.2)

(1) MOV EAX,299FF94H

ADD EAX,34FFFFH

(2) MOV EAX,39393834H

AND EAX,0F0F0F0FH

17.要求将EAX中的第0,1位取反,用什么指令?(5.2.3)

18.如(EAX)= 00001122H,(EBX)= 00003344H,要求把它们装配在一起形成

(EAX)= 11223344H,试编程实现。(5.2.3)

19.在实方式下(16位段)编程序段,把长度为CX字节的数据块从DS:SI指定的源存储区搬到ES:

DI指定的目的存储区。(5.2.4)

20.JECXZ指令什么条件下转移?(5.2.5)

作业题答案

第一章计算机系统概述习题答案

1、计算机系统分为硬件和软件两大部分。硬件包括:运算器、控制器、存储器、输入设备、输出设备五个主要组成部分。软件分为系统软件和应用软件。

2、(1)汇编语言与处理器密切相关。每种处理器都有自己的指令系统,相应的汇编语言各不相同。所以,汇编语言程序的通用性、可移植性较差。

(2)汇编语言功能有限,又涉及寄存器、主存单元等硬件细节,所以编写程序比较繁琐,调试起来也比较困难。

(3)汇编语言本质上就是机器语言,它可以直接地、有效地控制计算机硬件,因而容易产生运行速度快、指令序列短小的高效率目标程序。

3、(1)1,0111,0001B 171H (2)10,0111,0001,0000B 2710H

(3)1111,1111,1111B FFFH (4)111,1111,1111,1111B 7FFFH

4、(1)2DH 45D (2)80H 128D

(3)FFFFH 65535D (4)FFH 255D

5、(1)1111,1010B 250D (2)101,1011B 91D

(3)1111,1111,1111,1110B 65534D (4)1,0010,0011,0100B 4660D

6、(1)将A、B、C均转换为十进制数,则

A=0.101B=1*2-1+1*2-3=0.5+0.125=0.625D

B=0.101D

C=0.101H=1*16-1+1*16-3=0.0625+0.0002=0.0627D

由此可得A最大C最小。

(2)将A、B、C均转换为十进制数,则

A=1011B=1*23+1*21+1=8+2+1=11D

B=1011D

C=1011H=1*163+1*16+1=4096+16+1=4113D

由此可得C最大A最小。

7、(1)0001,0010 (2)0010,0100 (3)0110,1000 (4)0001,0010,0111 (5)0001,0010,1000 (6)0010,0101,0101

(7)0001,0010,0011,0100 (8)0010,0100,0101,1000

8、(1)91 (2)89 (3)36 (4)90

(5)08 (6)97 (7)81 (8)02

9、466F72206578616D706C6527

746869732069732061206E756D62657220333639322E

10、(1)表示的十进制数为79D,字符为"O"。

(2)表示的十进制数为43D,字符为"+"。

(3)表示的十进制数为115D,字符为"s"。

(4)表示的十进制数为89D,字符为"Y"。

11、(1)D8=1101,1000B

当其为用补码表示的带符号数时,表示的十进制数是-40D。

当其为无符号数时,表示的十进制数是216D。

(2)FFH=1111,1111B

当其为用补码表示的带符号数时,表示的十进制数是-1D。

当其为无符号数时,表示的十进制数是255D。

12、当看作是无符号数时,对应的十进制真值是182D。

当看作是原码表示的带符号数时,对应的十进制真值是-54D。

当看作是补码表示的带符号数时,对应的十进制真值是-74D。

13、(1)原码:0000,0000B 反码:0000,0000B 补码:0000,0000B

(2)原码:1111,1111B 反码:1000,0000B 补码:1000,0001B

(3)原码:0111,1111B 反码:0111,1111B 补码:0111,1111B

(4)原码:1011,1001B 反码:1100,0110B 补码:1100,0111B

(5)原码:0111,1110B 反码:0111,1110B 补码:0111,1110B

(6)原码:1111,1110B 反码:1000,0001B 补码:1000,0010B

(7)原码:0100,0100B 反码:0100,0100B 补码:0100,0100B

14、如果认为是无符号数,它是十进制数97。

如果认为是BCD码,表示十进制数61。

如果认为是ASCII码,代表字符"a"。

15、(1)1111,0001B (2)1,0010,1110,0011B

(3)1010,1010,1100,1111B (4)11,0101,0011,0010,0101B

16、(1)表示:1010,1011+0100,1100 结果:0FBH。

(2)表示:0101,0101+1011,0100 结果:9H。

(3)表示:0101,0101-0100,1100 结果:9H。

(4)表示:0101,0101-1011,0100 结果:A1H。

(5)表示:1010,1011-0100,1100 结果:4FH。

(6)表示:1010,1011-1011,0100 结果:FBH。

17、(1)10100 (余数:100)(2)1001 (3)1011

(4)0100 (5)0010

18、总的来说可以概括为六个阶段:(1)8086/8088/80186. (2)80286. (3)80386. (4)80486. (5)Petium/MMX Petium. (6)Petium Pro/Petium II/Petium III。

19、整个1MB主存空间从低位地址到高位地址可分为4个区段:基本RAM区、保留RAM区、扩展ROM区和基本ROM区。

(1)基本RAM区(00000H-9FFFFH)。

该区共640KB,由DOS进行管理。

(2)保留RAM区(A0000H-BFFFFH)

该区段为系统安排的"显示缓冲存储区",共128KB,由显示卡上的RAM芯片提供支持,用于存放屏幕显示信息。

(3)扩展ROM区(C0000H-DFFFFH)

该区共128KB,由I/O接口卡上的ROM芯片提供支持,用于为系统不直接提供支持的外设安排设备驱动程序。

(4)系统ROM区(E0000H-FFFFFH)

该区共128KB,由系统占用。它主要提供ROM-BIOS程序。

20、检查和修改寄存器内容的命令为R,它有三种格式如下:

(1)显示CPU内所有寄存器内容和标志位状态,格式为:-R。

(2)显示和修改某个寄存器内容,格式为:-R register name。

(3)显示和修改标志位状态,格式为:-RF。

第二章8086指令系统习题答案

1、(1)状态标志:CF-进位标志,ZF-零标志,SF-符号标志,PF-奇偶标志

OF-溢出标志,AF-辅助进位标志。

(2)控制标志:DF-方向标志,IF-中断允许标志,TF-陷井标志。

2、8086机器代码格式一般是:

操作码寻址方式偏移量立即数。

3、(1)源操作数为立即寻址,目的操作数为寄存器寻址。

(2)源操作数为寄存器相对寻址,目的操作数为寄存器寻址。

(3)源操作数为寄存器寻址,目的操作数为寄存器间接寻址。

(4)源操作数和目的操作数均为固定寻址。

4、此题要求出物理地址,物理地址的计算公式为:

段地址(段首地址)*10H+偏移地址(有效地址)

(1)源操作数为立即寻址方式,操作数地址就在本条指令中。

(2)源操作数为直接寻址方式,其物理地址为

DS*10H+100H=20100H

(3)源操作数为寄存器间接寻址,其物理地址为

SS*10H+BP=15010H

(4)源操作数为基址变址寻址,其物理地址为

DS*10H+BX+SI+VAL=201E0H

5、(1)源操作数为立即寻址,目的操作数为寄存器寻址。

(2)源操作数为直接寻址,目的操作数为寄存器寻址。

(3)源操作数为寄存器寻址,目的操作数为寄存器寻址。

(6)源操作数为寄存器寻址,目的操作数为基址变址寻址。

(7)源操作数为寄存器相对寻址,目的操作数为寄存器寻址。

(8)源操作数为相对基址变址寻址,目的操作数为寄存器寻址。

(9)源操作数为寄存器寻址。

6、(1)位移量D(2)BX (3)637DH (4)D5B4H

(5)8E18H (6)1004FH

7、(1)此指令中AH与BX分别为8位和16位寄存器,所以类型不匹配。

(2)此指令中源地址和目的地址均为寄存器间接寻址的两个存储单元,而MOV指令不允许两存储单元间直接传送信息。

(3)源地址为基址变址寻址,则SI(或DI)应与BP或BX组合使用,而SI、DI不能一起使用。(4)目的操作数地址在本指令中用伪操作PTR将字类型改变成了字节类型。因此源操作数1000只能是字节立即数,否则类型不匹配。但一字节宽度仅为一个8位的二进制数,能表达的最大数为28=256,显然1000超出了一个字节的范围。

(5)虽然MOV指令允许寄存器与段寄存器交换信息,但CS不能用作目的寄存器。

8、4条指令的目的操作数都是基址加变址寻址方式。第(1)、(3)两条指令选用了BX作基址寄存器,(2)、(4)两条指令选用了BP作基址寄存器,所以,AX、CX的内容将送往数据段中的相应单元,BX、DX的内容将送往堆栈段中的相应单元。

第(1)条:

目的操作数地址:EA=[BX]+[SI]+1=300H+50H+1=351H

PA=(DS)左移4位+EA=1035H

源操作数地址:AX

执行:(AX)—>10351H

第(2)条:

目的操作数地址:EA=[BP]+[SI]+2=452H

PA=(SS)左移4位+EA=20452H

源操作数地址:BX

执行:(BX)—>20452H

第(3)条:

目的操作数地址:EA=[BX]+[DI]+3=363H

PA=(DS)左移4位+EA=10363H

源操作数地址:CX

执行:(CX)—>10363H

第(4)条:

目的操作数地址:EA=[BP]+[DI]+4=464H

PA=(SS)左移4位+EA=20464H

源操作数地址:DX

执行:(DX)—>20464H

上述4条指令执行后,存储器中相应单元的内容如下:

(10351H)=12 ;由第(1)条指令送入

(20452H)=300H ;由第(2)条指令送入

(10363H)=13 ;由第(3)条指令送入

(20464H)=15 ;由第(4)条指令送入

9、MOV BX,OFFSET TAB ;变量TAB的EA—>BX

MOV AL,4 ;TAB表中第五项的位移量4—>AL

XLAT TAB ;([BX+AL])=(TAB+4)=34H—>AL

10、MOV SI,OFFSET NUM ;将NUM的EA—>SI

LEA SI,NUM ;与上一条语句等效

MOV AX,[SI] ;([SI])—>AX

LEA AX,[SI] ;将SI所指的存储单元的EA—>AX

LEA DI,4[SI] ;取以NUM为首址的第三个字符存储单元的EA—>DI

LEA POIN,BUF ;错误语句,因为OPD不是寄存器

MOV POIN,OFFSET BUF ;将BUF的EA—>POIN

11、编程如下:

MOV AX,SUB1

SUB AX,SUB2

MOV DSUB,AX ;两低位字相减,结果—>DSUB

MOV AX,SUB1+2

SBB AX,SUB2+2 ;两高位字相减,并减去低位的借位CF

MOV DSUB+2,AX

12、AL=0B4H为无符号数的180D,为有符号数的-76D;BL=11H为无符号数的17D,为有符号数的+17D。MUL BL的执行结果为AX=180D*17D=3060D=0BF4H。

IMUL BL的执行结果为AX=(-76D)*17D=-1292D=0FAF4H。

又两乘积结果在AX中的高位数(在AH中)均不为0,所以两条指令均置OF=CF=1。

13、按先后顺序写出完成题目要求的4个功能的程序段如下:

MOV AL,25H ;AL<-25H

SHL AL,1 ;用逻辑左移指令左移一次,实现AL<-AL*2

MOV BL,15H ;BL<-15H

MUL BL ;AX<-AL*BL

上段程序执行后,AX=25H*2*15H=612H.。

14、编写的程序段如下:

MOV AX,4001H

CWD

MOV CX,4

IDIV CX

执行以上程序段后,商在AX中,余数在DX中,运算的结果为:

(AX)=1000H,(DX)=1。

15、执行完以上三条语句后,(AX)=0FFF9H,(SI)=0FFF9H。

16、该程序所完成的运算算式为:(a*b+c-70)/a并将运算结果存入变量D中,而余数存入D+2中(表达式中的a,b,c均为数值常量)。

17、首先列已知条件:

除数为非压缩的BCD数3,被除数为非压缩的BCD数53.被除数和除数的内存地址均未给出,我们可以随意给定,假设53存放在B字节单元中,3存放在A字节单元中。

其次确定算法:

字节除法要求被除数在AX中,结果的8位商在AL中,8位余数在AH中。因此首先应将被除数置AX 中,最后再将结果的商按要求存放在字节单元C中,余数存放在字节单元R中。编程时应注意,对两位非压缩BCD数与一位非压缩BCD数相除,应先用AAD指令将AX中的被除数调整成二进制数并存放在AL 中,然后再用DIV指令实现除法运算。

最后编程如下:

MOV AH,0 ;AH<-0

MOV AL,B+1 ;AL<-5(被除数十位)

DIV A ;除法,第一个余数在AH中

MOV C+1,AL ;[C+1]<-第一个商

MOV AL,B ;AL<-3(被除数的个位)

AAD ;调整

DIV A ;除法

MOV C,AL ;C<-7(第二个商)

MOV R,AH ;R<-2(第二个余数)

运算后的结果为[C]=07H,[C+1]=01H,[R]=02H,即商为17,余数为2,结果正确。

18、指令序列如下:

MOV AL,BCD1

ADD AL,BCD2

DAA

MOV BCD3,AL

MOV AL,BCD1+1

ADC AL,BCD2+1

DAA

MOV BCD3+1,AL

最后(BCD3)=4623结果正确。

19、在第三个语句中,AND出现了两次,但这两个AND所代表的意义是截然不同的。第二个AND是常量运算符。因而,“A AND 0FDH”是表示要进行逻辑运算的数值表达式,它是在汇编期间被运算出来的,结果为0B4H。而第一个AND是机器指令逻辑乘的指令助记符。它的源操作数是采用立即方式寻址,立即操作数为0B4H,该指令将被汇编程序翻译成目标代码,只有在CPU执行该目标代码时,才能完成(AL)∧0B4H—>AL的操作,最后AL中的内容为0A0H。

20、(1)要屏蔽某些位,可以用AND指令。

MOV AL,0BFH

AND AL,0FCH

指令执行后的结果为AL=0BCH。

(2)将给定数的某位置1,可以用OR指令。

MOV AL,43H

OR AL,20H

指令执行后的结果为AL=63H。

(3)要测试给定数的某位是否为0,可用TEST指令。

MOV AL,40H

TEST AL,0AFH

指令执行结果为00H。显然标志位CF=OF=0,SF=0,ZF=1,说明要测试的40H的第0,1,2,3,5,7位均为0。

(4)要测试操作数的某位是否为1,可先将该操作数按位取反,然后再用TEST指令测试。

MOV DL,AL

NOT DL

TEST DL,04H

JE NEXT

(5)要使操作数的某些位变反,可使用XOR指令。

MOV AL,11H

XOR AL,3H

指令执行后的结果为AL=12H.

(6)测试某一操作数是否与另一确定操作数相等,也可使用XOR指令来实现。

XOR AL,4EFH

JZ NEXT

21、方法一:

用变址寻址方式来访问S1和S2。即用S1[SI]和S2[SI]来分别表示S1和S2中各字节的有效地址,其中[SI]表示距S1或S2的起始地址的字节数。用CX控制循环次数,则SI的取值应从0~29,每循环一次SI加1。

MOV SI,0 ;SI<—0

MOV CX,30 ;计数器赋初值

NEXT: MOV AL,S1[SI] ;传送一个字节数据

MOV S2[SI],AL

INC SI ;SI<—SI+1

LOOP ;CX<—CX—1,CX≠0则转NEXT

方法二:

使用MOVS指令,并采用重复前缀,于是有

MOV SI,OFFSET S1

MOV DI,OFFSET S2

MOV CX,30

CLD ;串地址正向增值

REP MOVSB

22、(1)这个程序段完成的动作是:将FIRST开始的10个字节数据传送到SECOND段中。(2)MOVSB 和REP重复使用,MOVSB先执行,REP后执行。

(3)MOVSB第一次执行时完成的动作是:先将(SECOND)<—(FERST),然后将SI<—SI+1,DI<—DI+1。(4)REP指令第一次执行时,将CX<—CX—1,然后重复执行REP MOVSB。

23、(1)NEXT: MOV DL,[SI]

MOV [DI],DL

INC SI(或DEC SI)

INC DI(或DEC DI)

LOOP NEXT

(2)NEXT: MOV [DI],AL

INC DI(或DEC DI)

LOOP NEXT

24、该程序段可实现求(AX)绝对值的运算。现分析如下:

设x为一带符号的16位二进制数,有(AX)=[x]补。

如果x≥0,则[x]补=[x]原=|x|,转EXIT执行。

如果x<0,则[x]补可通过[x]原形成,形成的方式是:保持[x]原的符号位不变(即为1),其余各位取反后再加1。现要执行语句“NEG AX”,即对[x]补进行求补运算,运算的方法是:将(AX)连同符号位一起取反

后再加1,于是符号位由1变为0,即由负变正,而后面各位再取反加1则还原成原码中后面各位的值,因此[x]补=|x|。

25、第一条语句将(AX)与0比较,第二条语句是转移语句,根据前面一条语句的比较结果确定转移方向。如果(AX)≠0,则转至标号T处执行;否则顺序执行。

26、假设AX用来存放累加结果,BX存放待加数据项,每累加一次,BX内容加2,即指向下一个待加数据,直至累加的循环次数计数器CX中的内容为零为止,其中CX的初值为100。现编写程序段如下:MOV AX,0 ;累加器清零

MOV BX,2 ;置累加初值

MOV CX,100 ;置循环次数初值

NEXT:ADD AX,BX ;实现一次累加

ADD BX,2 ;形成下一个待累加数据

LOOP NEXT ;未加完则继续累加

MOV S,AX ;累加结果存入S变量

27、编写程序段如下:

CMP AX,BX ;比较AX与BX

JGE NEXT ;若AX≥BX则转NEXT

XCHG AX,BX ;若AX

NEXT: CMP AX,CX ;比较AX与CX

JGE DONE ;若AX≥CX则转DONE执行

XCHG AX,CX ;若AX

DONE:…

28、算法:将第1个字节和第100个字节的内容互换,将第2个字节与第99个字节的内容互换,……,那么,只要互换50次便可完成。

编写程序段如下:

MOV CX,50 ;置循环次数初值

LEA SI,DATA;将源操作数的地址偏移量送SI

MOV DI,SI

ADD DI,99 ;将目的操作数的地址偏移量送DI

NEXT: MOV AL,[SI] ;交换一个字节

XCHG AL,[DI]

MOV [SI],AL

INC SI ;源操作数地址加1

DEC DI ;目的操作数地址减1

LOOP NEXT ;继续交换过程直至CX=0

29、算法:假设自变量X的值在内。若AX<0则有Y=-1,若AX≥0则还要继续判断;当AX>0则有

Y=1,否则只有Y=0。

具体程序段可用条件转移和无条件转移指令来实现:

CMP AX,0

JL NONE

CMP AX,0

JG ONE

MOV Y,0

JMP OUT

NONE: MOV Y,—1

JMP OUT

ONE: MOV Y,1

OUT: RET

30、编制的程序如下:

MOV CX,L ;将数组长度存放在CX中

MOV SI,—1 ;初始化SI

MOV AL,20H ;在AL中存放空格的ASCII码

NEXT: INC SI ;SI增1

CMP AL,ASCII_STR[SI] ;进行比较

LOOPNE NEXT ;没找到且CX≠0时,继续循环

JNZ NOT_FOUND ;未找到则转入NOT_FOUND执行

.

.

.

NOT_FOUND:

第三章汇编语言程序格式答案习题

1.汇编语言源程序由语句序列构成。语句一般是由分隔符分成的四个部分组成,它们有两种格式。

(1)执行性语句------由硬指令构成的语句,它通常对应一条机器指令,出现在程序的代码段中:

标号:硬指令助记符操作数,操作数;注释

(2)说明性语句--------由伪指令构成的语句,它通常指示汇编程序如何汇编源程序:

名字伪指令助记符参数,参数,… ;注释

2.汇编语言的开发过程为:

(1)首先调用一个文字编辑程序,送入已编写好的源程序,建立一个源文件。

(2)调用汇编程序,把源程序汇编成目标程序(.OBJ),在此过程中进行语法检查。

(3)通过连接程序LINK转换为一个可执行文件(.EXE)。

(4) 最后调试程序(DEBUG)把可执行文件装入内存,在此过程中对程序和数据进行适当的修改和

调整,如此反复直到程序完全正确为止。

3.使用MASM6.0提供的集成开发平台PWB。PWB的功能特点:

全菜单方式操作:通过菜单选择执行编辑、编译、连接等。

集成编辑环境:完成源程序编辑。

多窗口:同时显示源程序和信息编译、连接。

CodeView源程序调试工具:

全屏幕调试工具,源代码级、符号调试。

多窗口,可同时显示源程序、寄存器、数据等。

可单步、分段、设置断点执行程序,可监测变量。

支持32位指令调试。

支持8087调试。

4.两条语句中的X1与X2都被赋值1000H,但因为X1是用EQU伪指令赋值的,所以X1的值不能被重

新赋值;而X2是用=伪指令定义的,因此X2的值可以被重新定义。

5.第二个AND是逻辑运算符,它在汇编时进行,计算表达式OPD1 AND OPD2后,产生一个立即数作

为指令的操作数,而第一个AND是指令助记符,它在汇编以后执行AND指令时进行。

6.DATX1 DB 300 DUP(?) ;为DATX1分配300个字节单元空间

DATX2 DB 100 DUP(?) ;为DATX2分配100个字节单元空间

MOV CX,100 ;CX<-100

MOV BX,200 ;BX<-200

MOV SI,0 ;SI<-0

MOV DI,0 ;DI<-0

NEXT: MOV AL,DATX1[BX][SI] ;AL<-[DS*10H+BX+SI+DATX1]

MOV DATX2[DI],AL ;[DS*10H+DI+DATX2]<-AL

INC SI ;SI<-SI+1

INC DI ;DI<-DI+1

LOOP NEXT ;CX<-CX-1,CX≠0时转NEXT执行

经过分析可以看出:此段程序完成的工作为将DATX1中的后100个字节数据传送到DATX2中去。

7.(1)MOV AX,DATAX

ADD DATAY,AX

MOV AX,DATAX+2

ADD DATAY+2,AX

(2)MOV DX,DATAX+2

MOV AX,DATAX

DIV DATAY

8.汇编程序在汇编这段程序时会发现,两条MOV指令的两个操作数类型属性不相同:OPER1+1为字

节类型属性,而AX为字类型属性;OPER2为字类型而AL为字节类型。

我们可以使用PTR属性操作符来临时指定操作数类型,于是以上指令修改为

MOV AX,WORD PTR OPER1+1

MOV AL,BYTE PTR OPER2

第一条MOV指令运行把OPER1+1的字内容送AX;把OPER1+1的内容送AL,把OPER2的第一个字节内容送AH,所以指令执行后(AX)=3402H;第二条MOV指令运行时把OPER2的第一个字节内容送入AL,即(AL)=34H。

9.用注释形式在程序右边逐条给出执行结果如下:

GO: MOV AX,CODE ;将CODE装入DS

MOV DS,AX

MOV AX,C ;将字5->AX

MOV BX,LENGTH C ;BX<-1

MOV BX,SIZE C ;BX<-2

MOV BX,TYPE C ;BX<-2

MOV BX,OFFSET C ;BX<-8

MOV AL,LENGTH B ;AL<-5

MOV AL,LENGTH D ;AL<-1

MOV AL,LENGTH A ;AL<-1

MOV AL,SIZE D ;AL<-1

MOV AL,SIZE B ;AL<-5

10.可以用以下几种等价方法实现要求:

DW 5150H

DB 50H,51H

DB 'PQ'

11.0FH。

相关文档
相关文档 最新文档