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

《汇编语言程序设计》模拟题,第1张

做一下选择题

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.编写一个程序实现:在BUF开始的存储区中存放30个带符号数,试统计其正数、负数和零的个数,并将统计的个数分别放到PLUS、NEGATIVE、ZERO单元中。

; 本程序通过编译,运行正确

Code Segment

Assume CS:Code,DS:Code

BUF db 23,-69,0,35,46,0,57,68,0,79,81,98,-43,251,21,15,-69,0,58,159,-27,-89,65,76,85,123,0,253,193,121

Elements equ ($-BUF)/Type BUF ;元素个数

Plus db 0 ;正数计数

Negative db 0 ;负数计数

Zero db 0 ;零计数

Start: push cs

pop ds

push cs

pop es ;使数据段、附加段与代码段同段

cld

lea si,BUF ;取数据地址

mov cx,Elements ;元素个数

Statics: cmp byte ptr [si],0 ;是否0?

jnz $+8 ;不是

inc Zero ;是,0计数

jmp Next_One

test byte ptr [si],80h ;是否正数?

jnz $+8 ;不是

inc Plus ;是,正数计数

jmp $+6

inc Negative ;负数计数

Next_One:inc si ;si增1,判断下一个元素

loop Statics

Exit_Proc: mov ah,4ch ;结束程序

int 21h

Code ENDS

END Start ;编译到此结束

2.若内存BUF开始的单元中存放10个无序的有符号数,试用冒泡法将它们升序排列。

; 冒泡法排序

Code Segment

Assume CS:Code,DS:Code

; -----------------------------------------

; 定义常量

Yes EQU 1

No EQU 0

On EQU 1

Off EQU 0

; -----------------------------------------

; 定义结构类型

Bubb_Para Struc ; 冒泡排序法参数表

Carry DB No ; 是否带符号。Yes:有符号数;No:无符号数

Sort DB No ; 升序/降序。Yes:升序;No:降序

Yes_No DB 73h,76h,7dh,7eh

Load DB 0ach,0adh

Comp DB 3ah,3bh

Exchange DB 86h,87h

Store DB 0aah,0abh

Bubb_Para EndS

; -----------------------------------------

; 功能:按要求对数组元素排序,能够对字节元素、字元素进行无符号数、有符号数的升序、降序排序。

; 子程序原型:对字节元素进行无符号升序排序。

Bubbling Proc Near

PUSH AX

PUSH BX

PUSH CX

PUSH SI

PUSH DI

; ------------------根据排序参数,修改排序指令

LEA SI,Parameters

LEA DI,@@Compare

MOV AL,TYPE BUF

DEC AL

PUSH AX

LEA BX,[SILoad]

XLAT

MOV [DI][2],AL

POP AX

PUSH AX

LEA BX,[SIComp]

XLAT

MOV [DI][3],AL

POP AX

PUSH AX

LEA BX,[SIExchange]

XLAT

MOV [DI][7],AL

POP AX

LEA BX,[SIStore]

XLAT

MOV [DI][9],AL

MOV AL,[SICarry]

SHL AL,1

OR AL,[SISort]

XOR AH,AH

LEA BX,[SIYes_No]

XLAT

MOV [DI][5],AL

; ------------------按要求排序

MOV CX,Elements ;外循环次数

@@Scanning: PUSH CX ;入栈保存外循环次数

LEA SI,BUF ;数组首地址装入源变址寄存器

@@Compare: PUSH SI

POP DI ;当前数组元素地址赋给目的变址寄存器,以备交换之用

LODSB ;将当前数组元素读入累加器

CMP AL,[SI] ;当前数组元素与相邻的下一个数组元素相比较

JBE @@NextOne ;若小于或等于,不作数据交换,处理下一个数组元素

XCHG AL,[SI] ;若大于,交换数组元素

STOSB ;保存数值较小者

@@NextOne: LOOP @@Compare ;处理下一个数组元素

POP CX ;外循环次数出栈

LOOP @@Scanning ;下一趟比较

; ------------------

POP DI

POP SI

POP CX

POP BX

POP AX

RET

Bubbling EndP

BUF DB -112,56,72,98,32,251,97,63,123,21 ;需要排序的数据

Elements EQU ($-BUF)/Type BUF-1 ; 外循环次数

Parameters Bubb_Para <Yes,Yes>

Start: push cs

pop ds

push cs

pop es ;使数据段、附加段与代码段同段

call Bubbling ;对BUF中的元素按无符号数、升序排序

Exit_Proc: mov ah,4ch ;结束程序

int 21h

Code ENDS

END Start ;编译到此结束

; 本程序通过编译,运行正确

Data Segment

org 200h

Data_BCD db 58h ;两位BCD码

db , ;保存转换后的ASCII码

Data Ends

Code Segment

Assume CS:Code,DS:Data

Start: mov ax,Data

mov ds,ax ;数据段段地址

mov al,Data_BCD ;取两位BCD码

xor ah,ah ;累加器高位字节清零

mov cx,4 ;逻辑左移、右移次数

shl ax,cl ;ax左移4位,把两位BCD码的高4位移到累加器高字节

shr al,cl ;把两位BCD码的低4位移回原位置,实现两位BCD码的拆分

or ax,3030h ;高低位分别加上30h,实现两位BCD码到ASCII码的转换

mov Data_BCD[1],ah ;保存高位ASCII码

mov Data_BCD[2],al ;保存低位ASCII码

Exit_Proc: mov ah,4ch ;结束程序

int 21h

Code ENDS

END Start ;编译到此结束

;------------------------------------------------------------

14.假设变量A存放字节数据是39H, 变量B存放字节数据是36H,试编写程序实现将两个数组合后成为96 H,存放变量C中

;------------------------------------------------------------

MOV AL, A ;取来A

AND AL, 00001111B

MOV CL, 4

SHR AL, CL ;左移4位

MOV CL, AL

MOV AL, B ;取来B

AND AL, 00001111B

ADD AL, CL ;合成

MOV C, AL ;保存

END

;------------------------------------------------------------

15.比较两个变量A和B的大小,在屏幕上显示比较结果(A>B、A<B )

;------------------------------------------------------------

DATA SEGMENT

A DB 39H ;在这里写入:0~255

B DB 36H ;在这里写入:0~255

MSG1 DB 13, 10, 'A >= B $'

MSG2 DB 13, 10, 'A < B $'

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA

START:

MOV AX, DATA

MOV DS, AX

MOV AL, A ;取来A

SUB AL, B ;减去B

JB FU ;不够减转移

LEA DX, MSG1 ;够减就显示A>=B

JMP DISP

FU:

LEA DX, MSG2

DISP:

MOV AH, 9 ;显示字符串

INT 21H

MOV AH, 4CH

INT 21H

CODE ENDS

END START

;------------------------------------------------------------

其它题目,也回答了不少,可见楼主提问的其它网页。

一、改错(只能对每条错误指令的一个 *** 作数进行修改)。(共10分,每小题1分)

1 MOV BX,AL 改正: MOV BX,BX

2 MOV AX, A999H 改正:MOV AX,0A999H

3 MOV AL, 1234 改正:MOV AX,1234

4 MOV AX, [CX] 改正:MOV AX,[BX]

5 MOV DS, 1000H 改正:MOV AX,1000H MOV DS,AX

6 ADD [BX],10 改正: ADD BYTE PTR [BX],10

8 PUSH AH 改正:PUSH AX

9 INC [BP] 改正:INC BYTE PTR [BP]

9 MOV [DI],WORD PTR [SI] 改正:MOV DI,WORD PTR [SI]

10 MUL 10 改正:MOV CX,10 MUL CX

2012年〈汇编语言程序设计〉半期试题(堂下开卷)

一.名词解释(本大题共5小题,每小题3分,共15分)试解释下列名词的含义。

1. 逻辑地址:在CPU内部的存储单元地址表示形式,分为段基值和偏移量两个组成部分,

它们都是16位的,在指令或源程序中只能使用逻辑地址来表达存储单元。

2. 物理地址:CPU访问存储单元时向地址总线传送的地址表示形式,是20位的地址,由

逻辑地址中段基值乘以16再加上偏移量得到,逻辑地址到物理地址的转换由CPU在执行访问存储单元的指令时自动完成。

3. 标志寄存器:在CPU中由状态标志位与控制标志位组成的寄存器称为标志寄存器,其

中状态标志位用于标识运算指令执行后运算结果的特征,控制标志位用于控制CPU的工作模式或改变CPU对某些事件的响应方式。

4. 存储器寻址方式:即获得存储单元地址的方式,在8086/8088CPU中包括直接寻址、寄

存器间接寻址、基址寻址、变址寻址、基址变址寻址这五种寻址方式。

5. 补码:CPU内部用于表示带符号数的一种编码,正数的补码为真值本身,负数的补码为

真值变反加1的结果。

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

1. 将十进制数100分别转换为二进制、十六进制数,它们的表示形式分别为多少? 答:100的十六进制表示为64H,二进制表示为01100100B。 2. 假设(DS)=0B00H,(BX)=0210H,对于指令MOV DS:120H[BX],AL,其目的

*** 作数的物理地址为多少?

答:EA=(BX)+120H = 0210H+0120H = 0330H,物理地址 = (DS)16+EA = 0B000H+0330H=0B330H。 3. 假设(BX)=0210H,(DI)=0060H,对于指令ADD DL,[BX][DI],其源 *** 作数的偏

移量为多少?

答:源 *** 作数EA = (BX)+(DI)= 0210H+0060H =0270H。 4. 假设当前(SP)=0060H,连续执行5条PUSH指令后,(SP)=? 答:(SP)=0060H – 52 = 0060H – 000AH = 0056H

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

答:先将数值转换为二进制表示: - 65 = - 41H = - 01000001B ,由于是负数,变反加1得到补码形式:10111110B +00000001B = 10111111B

三.排错题(本大题共4小题,每小题5分,共20分)每小题列出了一条指令,判断该指

令有无语法错误,如果存在语法错误,请指出具体的错误原因,判断正确给2分,分析正确给3分,判断错误不给分。

1. PUSH 5588H

答:错误,单 *** 作数指令不能使用立即数寻址方式。 2. MOV DS, 1720H

答:错误,MOV指令不能将立即数直接传送至段寄存器,需要通用寄存器作为中转。 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)= 01H (1分),(BL)= 0B5H (1分), CF= 1 (1分),OF= 0 (1分),PF= 0 (1分)

2. 阅读如下程序片段

MOV AL,0F3H MOV DL,0C4H ADD AL,DL AND AL,0FH

执行上述程序片段后,(AL)= 07H (1分),(AF)= 不确定 (1分), CF= 0 (1分),OF= 0 (1分),PF= 0 (1分)

3. 阅读如下程序片段

MOV AL,7EH MOV CL,04H ROL AL,CL

执行上述程序片段后,(AL)= 0E7H (2分),(CL)= 04H (1分), CF= 1 (1分),OF= 不确定 (1分)

4. 阅读如下程序片段

MOV AX,0632H MOV BX,0C202H SUB AX,BX INC AX

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

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

=28H

MOV BX,0024H LEA BX,[BX] OR BX,0 ADC BX,[BX]

执行上述程序片段后,(BX)= 287AH (3分),(CF)= 0 (2分), OF= 0 (1分)

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

MOV AX,0001H MOV BX,0002H PUSH AX PUSH BX POP CX POP BX

执行上述程序片段后,(AX)= 0001H (2分),(BX)= 0001H (2分), (SP)= 0064H (1分)

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

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

mov cl, 4 rol bl, cl

2. 试编写一程序片段,不使用乘除法指令,实现((AX)5+14)/ 2的功能(AX中的数

据理解为补码)(8分) 答:

mov bx, ax mov cl, 2 sal ax, cl add ax, bx add ax, 14 sar ax, 1

以上就是关于《汇编语言程序设计》模拟题全部的内容,包括:《汇编语言程序设计》模拟题、汇编语言程序设计题求高手、汇编语言程序设计题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9343652.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存