试回答:(1)DA1 的偏移地址是: 20H (2)COUNT的值是 0AH (3)DA2+5 字节单元的内容是 ?U?的ASCII码_
9.假定(DX)=10111001B, 的值。
(1)SHR DX,1 (2)RCR DL,1 (3)RCL DX,CL 答:(1) 005CH (2) 00DCH (3) 05CCH
10.写出完成下述功能的程序段:
(1)传送 25H 到 AL 寄存器 (2)将 AL 的内容乘以 2 (3)传送 15H 到 BL 寄存器(4)AL 的内容乘以 BL 的内容。并请写出最后(AX)=? 答:
=612H =1554
11.写一程序段,求双字长数 DX∶bX 的相反数。 答: NEG DX NEG AX SBB DX, 0
12.在某子程序的开始处要保护 AX,BX,CX,DX 四个寄存器信息,在子程序结束时要恢复这 四个寄存器信息。例如:
PUSH AX
PUSH BX 保护现场 PUSH CX / PUSH DX/ :
}恢复现场
试写出恢复现场时的指令序列。 答: POP DX
POP CX POP BX POP AX
13.完成下列操作,选用什么指令:
(1)将 AX 的内容,减去 0520H,和上次运算的借位; (2)将变量名 TABL 的段地址送 AX; 答:
14.D1 DB 20H DUP(?)
D2 DW D1 请写出用一条指令实现取 D1 的偏移地址=>SI 中的三种方法。 答: ① LEA SI,D1 ② MOV SI,OFFSET D1 ③ MOV SI,D2 15.什么叫寻址方式?常用的寻址方式有哪些?
答:寻址方式是指寻找指令中操作数所在地址的方法。
常用的寻址方式有:立即寻址.直接寻址.寄存器寻址.寄存器间接寻址.变址寻址.基址加变 址.隐含寻址等。
16.什么是逻辑地址?它由哪两部分组成?8086 的物理地址是如何形成的?
答:逻辑地址是将存储器分成若干个段之后而出现的一种地址形式,它由段地址和偏移地址 组成,物理地址是将逻辑地址中的段地址左移 4 个二进制位,再加上偏移地址而形成的. 17.简述汇编语言的上机过程包括哪几个步骤? 1) 设计程序
2) 使用 masm 命令编译程序,生成扩展名为 obj 的文件 3) 使用 link 命令连接程序,生成扩展名为 exe 的可执行文件 4) 执行生成的可执行文件
18.指出下列指令的对错,并说明理由,加以改正。 DATA SEGMENT
VAR1 DB ? VAR2 DB 10 VAR3 EQU 100 DATA ENDS
(1)MOV 34H, VAR2 (2)MOV VAR1,AX (3)VAR3 EQU 20 答:
(2)错在:源操作数和目的操作数类型不匹配;改为:MOV VAR1, AL
(3)EQU 伪指令赋值以后,程序中不能再重复赋值。改为:VAR3=100; VAR3=20
六.程序设计题:
1.试编制一程序段,用串操作指令实现以 DA_BY 为首址的 20H 个字节单元中存放相同字符 ?Y?(设 DA_BY 存储区已有 ES 指向) LEA DI,DA_BY
MOV CX,32 MOV AL,?Y? CLD
REP STOSB
2.在 BUF1 和 BUF2 两个数据区中,各定义有 10 个带符号字数据,试编制一完整的源程序, 求它们对应项的绝对值之和,并将和数存入以 SUM 为首址的数据区中。 DATA SEGMENT
BUF1 DW-56,24,54,-1,89,-8…… BUF2 DW45,-23,124,345,-265,…… SUM DW10DUP(0) DATA ENDS
3.编制程序段实现:将 AX 寄存器中的 16 位二进制数分成四组,每组 4 位,然后把这 4 组数 分别放在 AL.BL.CL.和 DL 中。 MOV BH,AL MOV CH,AH MOV AL,AH AND AL,0F0H MOV BL,AH AND BL,0FH MOV CL,BH AND CL,0F0H MOV DL,BH AND DL,0FH
4.编制完整程序实现下列算式:W=X+Y+36-Z。设 X.Y.Z.W 均为双字长数据,各自的低十六位 数和高十六位数分别存放在 X.X+2.Y.Y+2.Z.Z+2 的存储单元中, 位字分别存放在 W 和 W+2 两个单元中。 DATA SEGMENT X DD … Y DD … Z DD … W DD … DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AX,X ADD AX,Y MOV BX,X+2 ADC BX,Y+2 ADD AX,36 ADC BX,0 SUB AX,Z SBB BX,Z+2 MOV W,AX MOV W+2,BX CODE ENDS END START
5.编程序段计算 SUM=∑ai=a1+a2+...+a20,已知 a1......a20 依次存放在以 BUF 为首 址,i=1 的数据区,每个数据占两个字节,和数 SUM 也为两个字节。 循环控制采用计数控制) 出来。
MOV AX,0
MOV BX,OFFSET BUF MOV CX,20
LOP:ADD AX,[BX] INC BX INC BX LOOP LOP
MOV SUM,AX
6.试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。 答: BEGIN:MOV AH,1
INT 21H CMP AL,?a? JB STOP CMP AL,?z? JA STOP
SUB AL,20H MOV DL,AL MOV AH,2 INT 21H JMP BEGIN STOP:RET
7.试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。 答: BEGIN:MOV AH,1
INT 21H CMP AL,?a? JB STOP CMP AL,?z? JA STOP
SUB AL,20H MOV DL,AL MOV AH,2 INT 21H JMP BEGIN STOP:RET
9.编定程序段,用 DOS 的 1 号功能调用通过键盘输入一字符,并判断输入的字符。如字符是 \,则转向 YES 程序段;如字符是\,则转向 NO 程序段;如是其他字符,则转向 DOS 功 能调用,重新输入字符。(考生勿需写出源程序格式,只需写出与试题要求有关的指令序列) (YES 和 NO 分别是两程序段入口处的标号)
KEY:MOV AH,1 INT 21H CMP AL,?Y? JE YES
CMP AL,?N? JE NO JMP KEY 答案:
DATA SEGMENT
BUF1 DW -56,24,54,-1,89,-8,---- BUF2 DW 45,-23,124,345,-265,---- SUM DW 10 DUP(0) DATA ENDS
STACK1 SEGMENT PARA STACK DW 20H DUP(0) STACK1 ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1 START:MOV AX,DATA MOV DS,AX MOV CX,10 LEA SI,BUF1 LEA DI,BUF2 LEA BX,SUM
NEXT:MOV AX,[SI] MOV DX,[DI] TEST AX,8000H JE TDX
NEG AX
TDX:TEST DX,8000H JE ADDS NEG DX
ADDS:ADD AX,DX MOV [BX],AX ADD SI,2 ADD DI,2 ADD BX,2 LOOP NEXT MOV AH,4CH INT 21H CODE ENDS END START
-1 x<0
10.编写计算下面函数值的程序 y= 0 x=0
1 x>0
其中,输入数据 x 和输出数据 y 均在数据段中定义,且皆为字节变量。
DATA SEGMENT
X DB 45H
DB ? Y
DATA ENDS ;
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:MOV AX,DATA
MOV DS,AX MOV AL,XXX MOV AH,0 CMP AL,0 JGE NEXT1 MOV BL,-1 JMP OVER NEXT1:CMP AL,0
JE NEXT2 MOV BL,1 JMP OVER NEXT2:MOV BL,0 OVER: MOV ZZZ,BL
MOV AH,4CH INT 21H CODE ENDS
END START
11.写一个把字符串中的大写字母改写为小写字母的子程序 标志。
;子程序名:STRLWR ;功 能:把字符串中的所有大写字母改写为小写字母 ;入口参数:DS∶BX=存放改写所需字符串的缓冲区首地址 ;出口参数:无 STRLWR PROC
PUSH AX PUSH SI MOV SI,BX AGAIN: MOV AL,[SI]
OR AL,AL JZ OK