汇编语言程序题? 20个简单汇编语言程序

4542℃ GARRY

汇编语言程序题?20个简单汇编语言程序

《汇编语言程序设计》模拟题

做一下选择题

1,cx

2, 0号中断

3,字 word

4,bx=4336H cx=0136H 执行后bx=bx-cx=4200H

结果为正 sf=0 zf=0(不为零) CF=0(没借位) of=0

5,fees中有100+1=101个字型数据,从0~100标号 A

仅供参考.

汇编语言模拟试题

1.逻辑地址 源程序经过汇编或编译后,形成目标程序,每个目标程序都是以0为基址顺序进行编址的,原来用符号名访问的单元用具体的数据——单元号取代。这样生成的目标程序占据一定的地址空间,称为作业的逻辑地址空间,简称逻辑空间。在逻辑空间中每条指令的地址和指令中要访问的操作数地址统称为逻辑地址。

2.物理地址 内存是由若干个存储单元组成的,每个存储单元有一个编号,这种编号可惟一标识一个存储单元,称为内存地址(或物理地址)。

3.标志寄存器 用来保存程序执行结果或者状态的寄存器,由各个标志位组成,标志寄存器中的标志位分两种类型:状态标志位和控制标志位,分别用来反应结果状态或控制程序执行的。

状态标志位常用的有ZF(零标志位)、SF(符号标志位)、PF(奇偶标志位)、CF(进位标志位)、OF(溢出标志位)、AF(辅助进位标志位);

控制标志位常用的有DF(方向标志位,用于串处理操作方向控制的)、TF(单步执行的跟踪标志位)、IF(中断允许标志位)。

4.存储器寻址方式 在指令中,有时要寻找操作数的地址,有时要寻找转移地址(如转移指令、CALL指令等),这些寻找地址的方式就称为寻址方式。8086微处理器寻找操作数地址有七种方式:立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址等;寻找转移地址的方式有段内寻址和段间寻址,它们又分为段内直接、段内间接、段间直接、段间间接寻址等。

5.补码 补码是计算机底层运算中,对运算符的一种表示方法。主要功能是将减法的运算转化为加法运算。

简单的说对于一个二进制数来说,正数的话它的原码,反码,补码都一样.

如果机器数是负数,反码是对它的原码(符号位除外)各位取反而得到的.

补码是对它的原码(除符号位外)各位取反,并在未位加1而得到的。

二.计算题(本大题共5小题,每小题4分,共20分)试按照各小题的要求给出计算结果。

1.将十进制数100分别转换为二进制、十六进制数,它们的表示形式分别为多少?

(1100100)2, (64)16

2.假设(DS)=0B00H,(BX)=0210H,对于指令MOV DS:120H[BX],AL,其目的操作数的物理地址为多少?

0B00H*10H+210H+120H = B330H

3.假设(BX)=0210H,(DI)=0060H,对于指令ADD DL,[BX][DI],其源操作数的偏移量为多少?

这道题说的不明白,偏移量是相对于谁的,如果相对于段,210H+60H=270H

如果相对于基址,就是DI,60H

4.假设当前(SP)=0060H,连续执行5条PUSH指令后,(SP)=?

执行push,指针减小,每次占用两个字节,60H-2*5 = 56H

5.对于一个十进制数 – 65,其二进制补码表示形式为多少?

(65)2 = 1000001,取反0111110,加一0111111,加符号10111111

三. 排错题(本大题共4小题,每小题5分,共20分)每小题列出了一条指令,判断该指令有无语法错误,如果存在语法错误,请指出具体的错误原因,判断正确给2分,分析正确给3分,判断错误不给分。

1.PUSH 5588H ;push的源操作数不能是立即数

2.MOV DS, 1720H ;给段寄存器赋值不能给立即数

3.ADD AX, CL ;AX是16位的,CL是8位的,不能相加

4.AND AX,[DX] ;DX不是基址寄存器

四.程序分析题(本大题共6小题,每小题5分,共30分)每小题列出了一段小的程序片段和相关存储单元的初始值,请按题目的要求分析各程序片段的运行结果。(寄存器中的内容请使用十六进制形式给出)

1.阅读如下程序片段

MOV AL,4CH

MOV BL,0B5H

ADD AL,BL

执行上述程序片段后,(AL)= 1H,(BL)=B5H ,

CF= 1,OF=0 ,PF=0 .

2.阅读如下程序片段

MOV AL,0F3H

MOV DL,0C4H

ADD AL,DL

AND AL,0FH

执行上述程序片段后,(AL)=7 ,(AF)=0 ,CF=0 ,OF=0 ,PF=1.

3.阅读如下程序片段

MOV AL,7EH

MOV CL,04H

ROL AL,CL

执行上述程序片段后,(AL)= e7H,(CL)=4 ,

CF=1 ,OF=0 .

4.阅读如下程序片段

MOV AX,0632H

MOV BX,0C202H

SUB AX,BX

INC AX

执行上述程序片段后,(AX)=4431H ,(CF)= 1,

OF= 0.

5.阅读如下程序片段,假设(DS)=0100H,字节单元(01024H)=56H,字节单元(01025H)=28H

MOV BX,0024H ;bx = 24h

LEA BX,[BX] ;bx = 56h,cf=1

OR BX,0 ;bx=56h, cf=0

ADC BX,[BX] ;应该加56H那个单元的内容

执行上述程序片段后,(BX)= 56H+[01056H],(CF)=取决于[01056H]是多少,

OF= 取决于[01056H]是多少,.

这道题如果不是你贴错了,就是出题的搞错了

6.阅读如下程序片段,假设(SP)=0064H

MOV AX,0001H

MOV BX,0002H

PUSH AX

PUSH BX

POP CX

POP BX

执行上述程序片段后,(AX)= 1,(BX)=1 ,

(SP)= 64H,

五.程序设计题(本大题共2小题,第一小题7分,第二小题8分,共15分)

1.试编写一程序片段,实现BL高4位与低4位相互交换(7分)

push ax

mov al,bl

shl bx,1

shl bx,1

shl bx,1

shl bx,1

and al,f0

shr ax,1

shr ax,1

shr ax,1

shr ax,1

and al,0f

or bl,al

pop ax

2.试编写一程序片段,不使用乘除法指令,实现((AX)*5+14)/ 2的功能(AX中的数据理解为补码)(8分)

push bx

mov bx,ax

shl ax,1

shl ax,1

add ax,bx

add ax,14

shr ax,1

pop bx

汇编语言程序设计填空题和问答题部分

1.为零

2.偏移

3.4位

4.group name db(前两个不太确定,你再查一下吧)

5.CX

6.CALL RET

7.MACRO ENDM 宏体

8. 设DS=2200H,BX=1000H,SI=0100H,偏移量D=0A2B1H,试计算出下列各种寻址方式下的有效地址,填入括号中。

A.使用D的直接寻址 (0A2B1H )

B.使用BX的寄存器间接寻址 (1000H)

C.使用BX和D的寄存器相对寻址(0B2B1H)

D.使用BX、SI和D的相对基址变址寻址 (0B3B1H)

E.使用BX、SI的基址变址寻址(1100H)

9.结束返回

10.CLD STD

11.指出下一条将要被执行的指令在代码段中的偏移地址

12.0~255 00H~FFH -128~127 80H~7FH

13.提供段地址

14.软件系统和硬件系统

15.SS

16.DI

17.初始化部分 循环部分 控制部分(这个也要查一下你们的教材,不同的教材可能不一样)

18.符号地址(这个不确定啊,查查教材吧)

19.数据段—ds 代码段—cs 附加段—es 堆栈段—ss

20.二进一

1.mov ax,10

mov bl,10

mov cl,4

2.立即寻址

变址寻址

寄存器直接寻址

基址变址寻址

隐含寻址(或称为固定寻址)

问题补充:

1.C

2.D

汇编语言程序设计练习题1. 逆序输出字符串“BASED ADDRESSING”。 2. 从键盘上输入2 个数,求出它们的和。

DATA SEGMENT

STRING DB 'BASED ADDRESSING'

LEN EQU $-STRING ;求字符串长度

DATA ENDS

CODE SEGMENT

ASSUME DS:DATA,CS:CODE

START:

MOV AX,DATA

MOV DS,AX

LEA SI,STRING

ADD SI,LEN

DEC SI ;SI指到字符串的最后一个字符

MOV CX,LEN ;CX中为字符串长度,也就是要显示的字符个数,用来作循环次数

S0:

MOV AH,02H

MOV DL,[SI]

INT 21H

DEC SI ;每显示一个,SI减1

LOOP S0

MOV AX,4C00H

INT 21H

CODE ENDS

END START

第2题:几位数呢?如果一位数还算简单,否则就有点复杂了.下面是一位数的加法.

DATA SEGMENT

NUM DB ?,? ;用来接收键盘输入的数据

SUM DB ? ;用来存和

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:

MOV AX,DATA

MOV DS,AX

MOV CX,2

LEA SI,NUM

S0:

MOV AH,01H

INT 21H

CMP AL,'9'

JBE NEXT

SUB AL,07H

NEXT:

SUB AL,30H

MOV [SI],AL

INC SI

LOOP S0

LEA SI,NUM

MOV AL,[SI]

ADD AL,[SI+1]

MOV SUM,AL

MOV AX,4C00H

INT 21H

CODE ENDS

END START