end start
4.27 编写查表程序。建立一个班级姓名表,给出学号,可显示出其姓名。
.model small .data
x1 db 'zhang yan $' ;姓名为10个字符宽度 x2 db 'li li $' x3 db 'wang lan $' x4 db 'zhao xue $' x5 db 'li jiang $' u db 3 ;要查的学号 .code start:
mov ax,@data mov ds,ax mov al,u ;给出学号 mov cl,10 mul cl ;u*10=30(号单元开始) mov ah,0 mov dx,ax ;地址保存到dx mov ah,9 ;9号功能显示字符串 int 21h mov ah,4ch int 21h end start
4.28 编程实现公式计算Z=X/4+16Y。
.model small .data
x db 4 y db 6 z db ? .code start:
mov ax,@data mov ds,ax mov al,x ; mov cl,2 sar al,cl ; X/4 mov cl,4 mov bl,y sal bl,cl ;16Y
add al,bl ;X/4+16Y mov z,al mov ah,4ch int 21h end start
4.29 编写程序段,将AL中的数乘以6,与CL相减后再除以3;把商保存到Y单元,余数保存到Y+1单元。
16
.model small .data y db ?,? .code start:
mov ax,@data mov ds,ax mov al,3 ;设al=3 mov cl,6 mul cl ;al*6 mov cl,4 ;设cl=4 sub al,cl ;相减 mov bl,3
idiv bl ; /3 mov y,al ;商 mov y+1,ah ;余数 mov ah,4ch int 21h end start
测验四答案:
1~5 BBACB 6~10 BDABC 11~15 BCABC
16~20 CAABD 21~25 BCADB 26~30 BCADB
习题五
5.1 转移指令分为哪两大类?转移指令的操作码和操作数如何表示? 5.2 写出与转移地址有关的寻址方式。
5.3 根据标志位转移的指令有哪些?执行什么操作时可以改变标志? 5.4 简述CPU实现分支的过程。
5.5 在短转移格式下,指令跳转的范围是多少?
5.6 在比较转移指令之前可以用什么指令进行判断?
5.7 比较转移指令为什么要分为无符号数比较和带符号数比较两类? 5.8 汇编语言可以控制和改变二进制某一位。有哪些指令可做位操作? 5.9 TEST指令是如何实现判断的?请举例说明。 5.10 移位指令影响标志位吗?影响哪些标志位?
5.11 已知(BX)=7890H,写出指令实现逻辑左移2位。请问哪个标志位改变了?5.12 分析下列程序段,给出执行结果: MOV AX,1234H
MOV CL,3
SAR AX,CL AND AX,0FH ADD AL,30H MOV DL,AL MOV AH,2 INT 21H
17
5.13 试说明下列程序段完成了什么操作? MOV AX,X MOV BX,Y CMP AX,0 JGE AA1 NEG AX JMP AA2 AA1: SUB AX,BX AA2: MOV Z,AX
5.14 指出下列指令的错误所在。
(1) AND [SI],3 (2) SUB DS,AX (3) PUSH 5 (4) OR 80H,AL
(5) CMP [BX],TABLE (6) ROL AL,3
5.15 写出将AL.4清零的指令。(AL中除第4位外的其他位保持不变)。 5.16 分别指出每条指令执行结果: MOV AL,37H (1) AND AL,0F0H (2) OR AL,03H (3) NOT AL
(4) XOR AL,0FH
5.17 简述操作系统对可执行程序的加载和执行过程。
5.18 PSP程序段前缀是什么时候建立的?占用多大内存空间?保存了什么内容、作用是什么? 5.19 转移指令中的标号在汇编时被翻译成什么值?这种方法的优点是什么? 5.20 无条件转移指令JMP $+2作用是什么?其转移地址是多少? 5.21 什么是分支表?怎样用分支表实现多路分支? 5.22 哪些逻辑指令可以使操作数清零?请写出指令。 5.23 用逻辑指令实现将AX的低4位清0。
5.24 用移位指令实现AX的高8位和低8位交换。 5.25 写出判断一个操作数是否为负数的程序段。
5.26 写出程序段。判断字节单元X中的数是否为偶数,是偶数则显示?Y?,否则显示?N?。 5.27 分支程序设计。完成如下公式的计算,请写出程序。
(X+3)/2 X>0 Y= 0 X=0
X×4 X<0
5.28 设X、Y、Z为字节单元。如果X≥0,Z=4X-Y/16,否则,Z=X的绝对值。编程序实现。 5.29 字数组M中有10个数据,分类统计其中正数、负数、0的个数,分别存入POSI、NEGA、ZERO 单元。
5.30 试编写程序,从键盘接收一英文单词,以空格结束,将其存入BUF开始的存储单元中,并在最后加上字符串结束符?$?。
5.31编程。将AX寄存器中的16位数分成4组,每组4位,从低到高分别放在AL,BL,CL,DL中。
18
测验五
单选题:
1.在分支指令中,利用符号进行判断的指令是_______。
A.JC B.JS C.JZ D.JO
2.当一个带符号数大于FFH时程序转移,满足条件的是_______。
A.正数和零 B.负数 C.负数和零 D.大于255的数 3.在执行条件转移指令前,不能形成条件的指令有________。
A.CMP B.SUB C.AND D.MOV
4. 无条件转移指令中,段内直接近转移到标号LET1的指令是________。
A.JMP SHORT LET1 B.JMP LET1 C.JMP BX D.JMP WORD PTR LET1 5.条件转移指令的转移范围是________字节。
A.-32768到+32767 B.0到255 C.-128到127 D.0到65535
6.要实现段间转移,下列说法正确的是________。
A.标号的属性为NEAR型的 B.标号的偏移地址送入CS
C.既要改变IP又要改变CS D.转移地址不能用存储单元给出 7.在条件转移指令中,结果不为0则转移的指令是________。
A.JNS B.JZ C.JS D.JNZ
8.两个带符号数比较,不大于则转移的指令是________。
A.JLE B.JBE C.JL D.JAE 9.设A=9210H,B=4582H,如果A>B,做相减运算,否则做相加。执行JG指令后,结果是________。
A.做相减运算 B.做相加运算 C.先做相减再做相加 D.什么都不做
10.在条件判断时,采用操作数相与运算的判断指令是________。
A.TEST B.CMP C.AND D.JCXZ
11.8086的转移指令根据转移的范围分为段内转移及段间转移,下列 是错误的。
A.无条件指令既可以段内转移,也可以段间转移 B.无条件转移指令既可以直接转移,也可以间接转移 C.条件转移指令既可以段内转移,也可以段间转移 D.条件转移指令是段内的直接短转移
12.带符号数乘以2操作用 移位指令实现。
A.SAL AL,1 B.SAL AL,2 C.SHR AL,1 D.ROL AL,2
13.将AL的2、6位屏蔽为0,其余位保持不变,指令为 。
A.AND AL,42H B.AND AL,0BBH C.OR AL,26H D.ADD AL,0FBH 14.将AL的第4位置1,其余位不变,指令为 。
A.OR AL,40H B.AND AL,40H C.OR AL,10H D.AND AL,1FH 15.将AL清0的指令为 。
A.AND AL,AL B.OR AL,0 C.XOR AL,AL D.XOR AL,0
16.对键盘输入的数字和字母进行判断,用指令 。
A.TEST AL,40H B.TEST AL,20H C.CMP AL,40H D.CMP AL,20H
19
17.将键盘输入的小写字母变为大写,用指令 。
A.AND AL,20H B.AND AL,0DFH C.OR AL,20H D.OR AL,0DFH 18.在操作系统下执行用户程序,属于 。
A.段内直接转移 B.段间直接转移 C.段内间接转移 D.段间间接转移
19.如无特殊指定,操作系统将用户程序调入内存时,代码段中第一条机器指令的 。
A.段地址为0 B.段地址由DS指出 C.偏移地址为0 D.偏移地址由SP指出 20.用户程序中的数据段的段地址,用 指令给出。
A.MOV AX,CODE B.MOV CS,CODE
MOV CS,AX MOV DS,CS C.MOV CS,DATA D.MOV AX,DATA
MOV DS,CS MOV DS,AX
测验五答案:
1~5 BADBC 6~10 CDABA 11~15 CABCC 16~20 ABBCD
第五章参考答案
习题五答案:
5.11 进位标志CF=1
5.12 先把AX的值除以8等于0246H,再把高12位屏蔽为0,剩下AL=06H加上30H变为ASCII码显示出来。
5.13 判断X>0,是,Z=X-Y;否则Z=X的绝对值
5.14 (1) 目的操作数是存储单元时,要用PTR伪操作指出单元的属性。
(2)DS段寄存器使用非法 (3)立即数使用非法。
(4)目的操作数不允许是立即数 (5) 两个操作数不允许都是存储单元
(6)移位次数超过1要用CL表示。 5.15 AND AL,11011111B 5.16 (1) AL=30H (2) AL=B7H (3) AL=C8H (4)AL=38H 5.27分支程序设计。完成如下公式的计算,请写出程序。
(X+3)/2 X>0 Y= 0 X=0
X×4 X<0
程序:
DATA SEGMENT X DB 23 Y DB ? DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA
20