aaa
(1) 现有程序段如下:
MOV AL,0
MOV BL,1
MOV CX,10
L: ADD AL,BL
INC BL
LOOP L
请回答:该程序段完成的功能是什么?执行完后AL的值是多少?
这段汇编代码的作用是将寄存器 AL 的初始值设置为 0,寄存器 BL 的初始值设置为 1,然后将 BL 的值加到 AL 上,并且每次循环结束 BL 的值加 1,循环执行 10 次。最终 AL 的值将是 1 + 2 + 3 + ... + 10,即 55。
(2)现有程序段如下:
MOV BL,AL
MOV CL,4
SHR BL,CL
MOV A,BL
AND AL,0FH
MOV B,AL
请回答:该程序段完成的功能是什么?如果AL的初值为56H,则A和B的值分别是多少?
该程序段完成的功能是将AL寄存器中的数值分为两部分,高4位移动到BL寄存器中,低4位保留在AL寄存器中,然后分别将BL和AL的值存入A和B寄存器中。
如果AL的初值为56H,那么经过程序段的处理后,A寄存器中的值为5H,B寄存器中的值为6H。
(3)阅读以下程序:
data_seg segment
num dw 10
a dw 12,14,9,10,3,81,10,4,88,66
data_seg ends
code_seg segment
assume cs:code_seg , ds:data_seg
main proc far
start: mov ax , data_seg
mov ds , ax
mov cx , num
dec cx
loop1: mov dx , cx
mov bx , 0
loop2: mov ax ,a[bx]
cmp ax,a[bx+2]
jge continue
xchg ax,a[bx+2]
mov a[bx],ax
continue: add bx ,2
loop loop2
mov cx ,dx
loop loop1
mov ax ,4c00h
int 21h
main endp
code_seg ends
end start
请回答:该程序段完成的功能是什么?程序执行完后数组a的值是什么?
该程序段完成了对数组a进行冒泡排序的功能。程序执行完后,数组a的值为{3, 4, 9, 10, 10, 12, 14, 66, 81, 88}。
(1)什么是汇编语言?汇编语言与高级语言相比有什么优缺点?
汇编语言是一种低级语言,它直接使用计算机CPU指令进行编程。汇编语言的代码是由一系列符号、助记符和地址表示的,而这些符号和助记符都与CPU指令一一对应。汇编语言可以让程序员直接控制计算机底层硬件,提高程序的运行效率和执行速度。
与高级语言相比,汇编语言的优点主要有:
1. 直接操作硬件
2. 执行速度快
3. 空间效率高
4. 可以访问机器的底层功能
缺点则主要有:
1. 难以维护
2. 编写周期短
3. 可读性低
(2)请简要描述汇编语言程序的开发过程。
1.根据任务需求设计算法,绘制流程图;
2.编写源程序;
3.汇编源文件生成目标文件;
4.连接目标文件生成可执行文件。
(3)子程序的参数传递有哪几种方式?请简单描述每种传递方式的特点。
一、是利用累加器或寄存器,
二、是利用存储器,
三、是利用堆栈;
当相互传递的数据较少时,采用寄存器传递方式可以获得较快的传递速度;
当相互传递的数据较多时,宜采用存储器或堆栈方式传递;
如果是子程序嵌套时,最好是采用堆栈方式。
(4)什么叫宏汇编?宏汇编技术与子程序技术相比有哪些优缺点?
宏汇编是一种基于汇编语言的高级语言,它允许程序员使用宏指令来定义常用的代码段,并在需要时使用这些宏指令来生成汇编代码。宏汇编可以大大简化程序的编写,提高代码重用性和可维护性。
相比之下,子程序技术是一种基于函数的编程技术,通过将代码分解成多个函数模块来实现可重用性和可维护性。与宏汇编相比,子程序技术更加通用化和面向对象化。
宏汇编的优点包括:
1. 更高的可读性和可维护性
2. 更高的代码重用性
3. 更高的可移植性
宏汇编的缺点包括:
1. 可能会导致代码膨胀
2. 对于复杂的程序,可能会造成可读性降低
3. 不易于编写和调试
(5)CPU处理中断的过程包括哪些处理步骤?
中断请求、中断响应、中断服务和中断返回
四 计算与编程题(两小题,共15分)
(1)设 DS=2000H, BX=0100H, SI=0002H, (20100H)=12H, (20101H)=34H,(20102H)= 56H, (20103H)= 78H, (21200H)= 2AH, (21201H)= 4CH,(21202H)=B7H,(21203H)=65H,试说明下列各条指令执行完后AX寄存器中的内容是多少(写出计算过程)?(本题6分)
1)MOV AX,1200H
AX=1200H
2)MOV AX,[BX+1100H]
20000H+1200H=21200H,
AX=4C2AH
3)MOV AX,[BX+SI]
20000H+0100H+0002H=20102H
AX=7856H
(2)设字符串的段地址、偏移地址和长度已经分别存于DS、SI和CX中,要统计其中字符“P”的个数,并存于DL中。试把空白处填上适当的指令(每一空白只填一条指令,本题4分)
MOV AL,‘P’
MOV DL,0
NEXT:CMP AL,[SI]
JNZ/JNE CONT
INC DL
CONT:INC SI
LOOPNEXT
(3)编写一段程序,实现将ARRAY数组中的50个数求和,并将和存入字变量S中。(本题5分)
assume cs:code, ds:data
data segment
ARRAY db 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
db 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37
db 38,39,40,41,42,43,44,45,46,47,48,49,50
COUNT db $-ARRAY
S dw ?
data ends
code segment
start:
mov ax, data
mov ds, ax
mov di, offset ARRAY
mov cl, COUNT
sub ax,ax
lp: add al, byte ptr [di];
jnc done
inc ah
done: inc di
loop lp
mov S, ax
mov ax, 4c00h
int 21h
code ends
end start
1.7 下列各数均为用十六进制表示的8位二进制数,请说明当它们分别被看作是用补码表示的数或字符的ASCII码时,它们所表示的十进制数及字符是什么?
(1) 4F (2) 2B (3) 73 (4) 59
答:(1) 4FH表示的十进制数为 79,4FH表示的字符为O;
2.1
在80x86微机的输入/输出指令中,I/O端口号通常是由DX寄存器提供的,但有时也可以在指令中直接指定00~FFH的端口号。试问可直接由指令指定的I/O端口数。
答:可直接由指令指定的I/O端口数为256个。
2.3在IBM PC机的存储器中存放信息如右下图所示。试读出30022H和30024H字节单元的内容,以及30021H和30022H字单元的内容。
30020H 12H
30021H 34H
30022H ABH
30023H CDH
30024H EFH
答:30022H字节单元的内容为ABH;30024H字节单元的内容为EFH。30021H字单元的内容为AB34H;30022H字单元的内容为CDABH。
3.1 给定(BX)=637DH,(SI)=2A9BH,位移量D=7237H,试确定在以下各种寻址方式下的有效地址是什么?
(1) 立即寻址
(2) 直接寻址
(3) 使用BX的寄存器寻址
(4) 使用BX的简接寻址
(5) 使用BX的寄存器相对寻址
(6) 基址变址寻址
(7) 相对基址变址寻址
答:(1) 操作数在指令中,即立即数;
(2) EA=D=7237H;
(3) 无EA,操作数为(BX)=637DH;
(4) EA=(BX)=637DH;
(5) EA=(BX)+D=0D5B4H;
(6) EA=(BX)+(SI)=8E18H;
(7) EA=(BX)+(SI)+D=1004FH;超过了段的边界,最高进位位丢失,因此EA=004FH。
试写出执行下列指令序列后BX寄存器的内容。执行前(BX)=6D16H。
MOV CL, 7
SHR BX, CL
答:(BX)=00DAH。
4.1 指出下列指令的错误:
(1) MOV AH, BX ;寄存器类型不匹配
(2) MOV [BX], [SI] ;不能都是存储器操作数
(3) MOV AX, [SI][DI] ;[SI]和[DI]不能一起使用
(4) MOV MYDAT [BX][SI], ES:AX ;AX寄存器不能使用段超越
(5) MOV BYTE PTR [BX], 1000 ;1000超过了一个字节的范围
(6) MOV BX, OFFSET MYDAT [SI] ;MYDAT [SI]已经是偏移地址,不能再使用OFFSET
(7) MOV CS, AX ;CS不能用作目的寄存器
(8) MOV ECX, AX ;两个操作数的数据类型不同
7.1 编写一条宏指令CLRB,完成用空格符将一字符区中的字符取代的工作。字符区首地址及其长度为变元。
答:宏定义如下:
CLRB MACRO N, CFIL
MOV CX, N
CLD
MOV AL, ‘ ’ ;;取空格符的ASCII码
LEA DI, CFIL
REP STOSB
ENDM
8.3 写出指令将一个字节数据输出到端口25H。
答:指令为:OUT 25H, AL
9.1 INT 21H的键盘输入功能1和功能8有什么区别?
答:键盘输入功能1:输入字符并回显(回送显示器显示) (检测Ctrl_Break);
键盘输入功能8:输入字符但不回显(也检测Ctrl_Break)。