Pop SI
2.测试AL寄存器,如果最高位和最低位同时为0,则转L0,如果最高位和最低位只有一个为1,则转L1,如果最高位和最低位同时为1,则转L2,画出流程图,并写出程序段。 答:参考 ROL AL,1 AND AL,3 JZ L0 SUB AL,3 JZ L3 JMP L2
第四章 汇编语言程序格式
一.选择题
1.下列叙述正确的是(C)。
A.对两个无符号数进行比较采用CMP指令,对两个有符号数比较用CMPS指令 B.对两个无符号数进行比较采用CMPS指令,对两个有符号数比较用CMP指令 C.对无符号数条件转移采用JAE/JNB指令,对有符号数条件转移用JGE/JNL指令 D.对无符号数条件转移采用JGE/JNL指令,对有符号数条件转移用JAE/JNB指令 2.源程序结束语句为(C)
A.ENDP B.ENDS C.END MAIN D.END
3.SKY:MOV AL,20H中操作数为(D) A.MOV B.SKY C.AL或20H D.AL和20H 4.下列为不合法的标志符的是(B) A.AXYZ B.5SKY C.@ATT D.?ABC 5.下列地址表达式正确的是(C) A.[BX-SI] B.[BP-DI] C.[BX+2] D.[BP+BX] 6.NEAR标号的类型值为(B) A.2 B.-1 C.4 D.-2
7.组合类型中本段与其它段无逻辑关系,每段均有自己的基址的组合类型是(A) A.NONE B.PUBLIC C.COMMON D.STACK
8.下面哪一个命令是显示内存单元的内容?(A) A.D命令 B.E命令 C.F命令 D.R命令
9.取变量偏移属性的分析运算符是(A) A.OFFSET B.TYPE C.SIZE D.SEG
10.分析运算符LENGTH只有用(C)定义的变量才有意义。 A.表达式 B.字符串
6
C.DUP D.疑问号 11.在段定义中,(B)是默认的定位类型 A.PAGE B.PARA C.WORD D.BYTE
12.定义缓冲区BUF,保留100个字节存储空间的语句是(D)。 A.BUF DB 100 B.BUF DW 100
C.BUF DW 100 DUP(?) D.BUF DB 100 DUP(?) 13.使计算机执行某种操作的命令是(B) A.伪指令 B.指令 C.标号 D.助记符
14.使用DOS系统功能调用时,使用的软中断指令是(b) A.INT 21 B.INT 10H C.INT 16H D.INT 21H 二.填空题
1.比较两个带符号的数A、B,当A=B时程序转移,测试的条件为( F=1) 2.指令JMP FAR PTR DONE属于(段间转移直接寻址)。
3.一个有128个字的数据区,它的起始地址为12ABH:00ABH,请给出这个数据区最末一个字单元的物理地址是(12C59H)。
4.在执行DAA指令,当高四位BCD码校正时产生进位,如要把此进位值送入AH中,对这进位值的操作应是(进位值在CF中,校正后根据CF内容再加在AH中) 5.执行后使BX=0的同时也使CF=0,OF=0的指令是( OR BX,BX )
第五章 循环与分支程序设计
一、选择题
1.编写分支程序,在进行条件判断前,可用指令构成条件,其中不能形成条件的指令有( D )。 A、CMP B、SUB C、AND D、MOV
2. 测试BL寄存器内容是否与数据4FH相等,若相等则转NEXT处执行,可实现的方法是( B)。
A. TEST BL,4FH JZ NEXT
B. XOR BL,4FH JZ NEXT
C. AND BL,4FH JZ NEXT
D. OR BL,4FH JZ NEXT 二、填空题
1. 下列程序段将AX中值乘以9,请将程序填写完整 (1)__________ MOV CL,3
(2)____________ POP BX
ADD AX,BX 答:
7
(1)PUSH AX (2)SHL AX,CL 2.
MOV BL,64H MOV CL,03H XOR AX,AX
AGAIN:ADD AL,BL ADC AH,0 DEC CL JNZ AGAIN 问:
(1)该程序段完成的功能是:将AX内容乘3送BX中 (2)AX=___012CH_____。
3.设AX,BX中的数一个为正数,一个为负数,下面程序段完成将正数送到PLW单元中存放,请将程序中所缺指令语句补上。 TEST AX,8000H
__JE K1或JZ K1_________ MOV PLW,BX JMP DONE
K1:__MOV PLW,A_______ DONE:
4.下面程序段是判断寄存器AH和AL中第3位是相同,如相同,AH置0,否则AH置全1。试把空白处填上适当指令。 ___ XOR AH,AL____ AND AH,08H
____ JE ZERO_____ MOV AH,OFFH JMP NEXT
ZERO:MOV AH,0 NEXT:??
5.下列程序段求数组ARRAY的累加和。请将程序填写完整。 ARY DW 45H,68H,????,0ABC1H,9600H;共10项 COUNT DW 10 (1)__________ MOV CX,COUNT XOR AX,AX
AGAIN:ADD AX,[SI] ADD SI,2
(2)____________ 答:
(1)LEA SI,AKY (2)LOOP AGAIN
6.以BUF为首址的字节单元中,存放了COUNT个无符号数,下面程序段是找出其中最大数并送入MAX单元中。
BUF DB 5,6,7,58H,62,45H,127,?? COUNT EQU $-BUF
8
MAX DB? ┇
MON BX,OFFSET BUF MOV CX,COUNT-1 MOV AL,[BX] LOP1:INC BX
____ CMP AL,[BX]_______ __ JAE NEXT
MOV AL,[BX] NEXT:DEC CX
_____ JNZ LOP1___________ MOV MAX,AL 三、编程题
1. 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。 答: 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
2. 在给定个数的数中寻找最大值,放至指定的存储单元。 参考程序:
DATA SEGMENT
BUFFER DB 2,4,3,6,1,5 COUNT DW 6 MAX DB ? DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX, DATA MOV DS, AX
MOV CX, COUNT LEA BX, BUFFER MOV AX, [BX] INC BX DEC CX
AGAIN: CMP AX, [BX] JGE NEXT
9
MOV AX, [BX] INC BX NEXT: INC BX
LOOP AGAIN CODE ENDS END START
第六章 子程序
一.编程题
1.主程序从键盘输入两个4位的十六进制数A和B,用子程序做十六进制计算A+B,并显示计算结果。 参考:
CODES SEGMENT ASSUME CS:CODES START: mov bl,0 mov cx,8 loop1: clc
mov ah,1h int 21h cmp al,'0' jz rotate stc rotate: rcl bl,1 dec cx jnz loop1 print: neg bl
mov dl,0dh mov ah,2h int 21h mov dl,0ah int 21h mov cx,8 clc loop2: rcl bl,1 jnc dis0 mov dl,'1' jmp display dis0:
mov dl,'0'
10
display:
mov ah,2h int 21h dec cx jnz loop2
exit:MOV AH,4CH INT 21H
CODES ENDS END START
11