PowerPoint 演示文稿

Download Report

Transcript PowerPoint 演示文稿

习题课
——数据处理部分
1 程序逻辑控制
1.下列指令中不等价的是()
A.JA和JNBE
B.JG和JNLE
C.JL和JNG
D.JBE和JNA
2.下列指令中等价的是()
A.JC和JO
C.JP和JPE
B.JNC和JNO
D.JA和JG
3.条件转移指令的转移范围()
A.-128-- +127
B.-32768 -- +32767
C.0 -- +255
D.0 -- +65535
4.循环指令LOOP AGAIN终止循环的条件是()
A.(AX)=0
B.(BX)=0
C.(CX)=0
D.(DX)=0
5.循环指令LOOPNZ终止循环的条件是()。
A.CX=0,且ZF=0
B.CX=0,或ZF=1
C.CX≠0,且ZF=0
D.CX≠0,或ZF=1
设AX,BX。CX中的数是带符号数,下列程
序求AX.BX.CX中的最小值,结果在AX中.请
将程序填写完整。
CMP AX,BX
(1)_________________
XCHG AX,BX
NEXT:CMP CX,AX
(2)_________________
XCHG AX,CX
EXIT:
答:(1)JLE NEXT
(2)JGE EXIT
下列程序测试DL寄存器D6和D2位。若同时
为 0 , 转 ZERO , 置 AX 为 0 , 否 则 转
NON_ZERO,置AX为1。
TEST DL,(1)_______
JZ ZERO
NO ZERO:MOV AX,1
(2)___________________
ZERO:MOV AX,0
EXIT:
答:(1)01000100B
(2)JMP NEXT
下列程序段求数组ARRAY的累加和。请将
程序填写完整。共10项数据。
ARY DW 45H,68H,…,0ABC1H,9600H;
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
1.执行下列程序:
MOV AX,9B47H
MOV BX,0B568H
ADD AX,BX
JNO L1
JNC L2
SUB AX,BX
JNC L3
JNO L4
JMP SHORT L5
问:1)程序执行后,(AX)= ?
2)程序转向哪个标号?
答: 1)9B47H
L5
程序分析题
DATA SEGMENT
S9 DB 0,1,2,3,4,5,6,7,8,9
DATA ENDS
┆
LEA SI,S9
LEA, DI,S9+1
MOV CX,5
LOP: MOV AL,[SI]
XCHG AL,[DI]
MOV [SI],AL
ADD SI,2
上述程序段运行后,S9开始的10个字
ADD DI,2
节存储单元内容是什么?
LOOP LOP
答: S9 DB 1,0,3,2,5,4,7,6,9,8
设在数据段中有X,Y两个变量(字节单
元),试编写程序段计算:
y=
x
当x>=0时
|x|
当x<0时
解:MOV AX, X
CMP AL, 0
JGE LAB
NEG AL
LAB:MOV Y, AL
在给定个数的数中寻找最大值,放至指定
的存储单元。
DATA
SEGMENT
BUFFER DB
2, 4, 3, 6, 1, 5
COUNT DW
6
MAX
DB
?
DATA
ENDS
CODE
START:
AGAIN:
NEXT:
CODE
SEGMENT
ASSUME CS:CODE,DS:DATA
MOV AX, DATA
MOV DS, AX
MOV CX, COUNT
LEA
BX, BUFFER
MOV AX, [BX]
INC
BX
DEC
CX
CMP AX, [BX]
JGE
NEXT
MOV AX, [BX]
INC
BX
LOOP AGAIN
MOV AX, 4C00H
INT
21H
ENDS
END
START
思考1
已知ARRAY DW 1200, 0069H, 798AH, … , 432BH;
共10项数据。
编程统计正数项个数存入PLUS单元中。
DATA SEGMENT
ARRAY DW 1200, 0069H, 798AH, 432BH, ……
PLUS DB ?
DATA SEGMENT
思考2
在BUF1和BUF2两个数据区中,各定义有10
个带符号字数据,试编制一完整的源程序,
求它们对应项的绝对值之和,并将和数存
入以SUM为首址的数据区中。
DATA SEGMENT
BUF1 DW -56,24,54,-1,89,-8,…
BUF2 DW 45,-23,124,345,-265,…
SUM DW 10 DUP(0)
DATA ENDS
2 过程
下面的程序段有错吗?若有,请指出错误。
CRAY
PROC
PUSH AX
ADD AX,BX
RET
ENDP CRAY
判断题(正确的画√ ,错误的画× )
1.寄存器传递参数法适合于参数较多的情
况。()
2.用赋值法编写子程序时,子程序内必须
修改返回地址。()
3.RET N指令中,N可为任意值。()
×√×
简答题
在指令系统中,段内、段间返回均为RET指令。试
回答:
(1)执行段内返回RET指令时,执行的操作是:
(2)执行段间返回RET指令时,执行的操作是:
答:(1)执行段内返回:
栈顶内容→IP,SP+2→SP
(2)执行段间返回:
栈顶内容→IP,SP+2→SP
栈顶内容→CS,SP+2→SP
编写完整程序,把从键盘读入的一个小写
字母转换成相应的大写母,并输出显示。
code segment
assume cs:code
main: mov ah,1
int 21h
;输入字符到al
mov bl,al
;暂存到bl中
sub bl,32
;小写字母转成大写字母
mov ah,2
mov dl,13
int 21h
mov dl,10
int 21h
;回车换行
mov dl,bl
;输出大写字母
int 21h
mov ah,4ch
int 21h
code ends
end main
;控制权交还DOS
设 在 DAT 单 元 存 放 一 个 -9 ~ +9 的 字 节 数 据 , 在
SQRTAB数据区中存放了0~9的平方值,请用直接
查表法编写一个子程序,在SQRTAB中查找出DAT单
元中数据对应的平方值送SQR单元。
要求:
子程序开始时必须利用堆栈保护用到的各寄存器,
并在返回前恢复;主程序结构要书写完整(包括
子程序的调用方式)。
其中数据段如下:
DATA
SEGMENT
DAT
SQRTAB
SQR
DATA ENDS
DB -6
DB 0,1,4,9,16,25,36,49,64,81
DB ?
DATA
SEGMENT
DAT
DB -6
SQRTAB DB 0,1,4,9,16,25,36,47,64,81
SQR
DB ?
DATA
ENDS
STACK SEGMENT PARA STACK
DW 20H DUP(?)
STACK ENDS
CODE
SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
CALL SUBROT
MOV AH,4CH
INT 21H
SUBROT
NEXT:
PROC
PUSH
AX
PUSH
BX
LEA
BX,SQRTAB
MOV
AL,DAT
TEST
AL,80H
JNS
NEXT
NEG
AL
XLAT
SQRTAB
MOV
SQR,AL
POP
BX
POP
AX
RET
SUBROT
CODE
ENDP
ENDS
END
SRART