16、程序段如下: CXFX
BLK1 DB 46,84,34,-5,20,122,73 :
MOV CX,7
LEA S1,BLK1
NEXT: MOV AL,[SI] INC SI
TEST AL,81H LOOPZ NEXT MOV BL,[SI] :
请回答程序段运行后:(AL)=___5或0FBH__ (BL)=___14H或20______ 17、下面程序的功能是什么? CXFX STRING DB 100 DUP(?) MOV AX,SEG STRING MOV DS,AX
LEA SI,STRING MOV CX,100 LAB: MOV AL,[SI] CMP AL,’a’ JB LAB1
CMP AL,’z’ JA LAB1 SUB AL,32 MOV [SI],A
LAB1: INC SI
LOOP LAB
将STRING里的小写字母’a’-‘z’转成相应的大写字母’A’-‘Z’ 18、现有下列数据段: CXTK DATA SEGMENT
STR1 DB‘ABCDEFGHIJKL' COUNT EQU -STR1 BUF DB COUNT DUP(0) DATA ENDS
下面程序段是实现把STR1中所有字符逆向传送到BUF缓冲区(即STR1中第一个字符送到BUF的最后一个单元,STR1中最后一字符送到BUF的第一个单元)。试把程序中所空缺的指令填上。
MOV SI,OFFSET BUF-1 MOV DI,OFFSET BUF
MOV CX,COUNT
___CLD_或 STD_____ LOOP:MOVSB
26
______ SUB SI,2__或____ ADD DI,2__
LOOP LOP
19、下述程序段完成计算2~20之间的偶数的和,并存于AX中。试把空白处填上适当的指令。 CXTK
XOR AX,AX
MOV BX,0
MOV CX,10或MOV CX,0AH CONT: ADD AX,BX
ADD BX,2 LOOP CONT
20、BEG为起始地址的存储区域中存放有100个字节数据,现将其首、尾颠倒过来,重新排放这100个字节数据。请在程序中的空格处填入适当的指令使其完整。 CXTK
MOV CX,32H LEA SI,BEG MOV DI,SI (1)
DON:MOV AL,[SI] (2) MOV [SI],AL (3) DEC DI LOOP DON HLT
答: (1) ADD DI, 99
(2) XCHG AL, [DI]
(3) INC SI
21、试编制一源程序,统计DA1字单元中含0的个数,如统计的个数为奇数,则将进位位置1,否则进位位清0。 BC
DATA SEGMENT DA1 DW XXXX DATA ENDS 答:
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA SI,DA1 MOV CX,16 XOR BL,BL AGAIN: MOV AL,[SI] HL AL,1 JC NEXT
27
INC BL NEXT:INC SI
LOOP AGAIN TEST BL,01H JNE L1 CLC
JMP DONE L1: STC
DONE: MOV AH,4CH INT 21H CODE ENDS END START
22、下述程序段完成计算2~20之间的偶数的和,并存于AX中。试把空白处填上适当的指令。 CXTK
XOR AX,AX MOV BX,0
MOV CX,10或MOV CX,0AH CONT: ADD AX,BX
ADD BX,2
LOOP CONT
23、如下程序应用冒泡法对一个无符号数组排序(由小到大排序),请完成该程序。
(注:为该程序分配100字的堆栈存储空间。) CXTK SSEG SEGMENT STACK
DW 100 DUP (?) SSEG ENDS DSEG SEGMENT
SWAP DB ?
ARRAY DW 32760, 127, 0, 65000, 230, 100 DSEG ENDS
CSEG SEGMENT
ASSUME CS∶CSEG,DS∶DSEG,SS∶SSEG START: MOV AX,DSEG MOV DS,AX
SORT: MOV CX,5
MOV SI,0 MOV SWAP,0
INNER: MOV AX,ARRAY[SI] CMP AX,ARRAY[SI+2] JBE NOSWAP
XCHG AX,ARRAY[SI+2]
MOV ARRAY[SI],AX MOV SWAP,1
NOSWAP: ADD SI,2
28
LOOP INNER
CMP SWAP,1 JNZ SORT MOV AH,4CH INT 21H CSEG ENDS
END START
第7章:子程序设计
1、主程序和所调用的子程序在同一代码段中,子程序的属性应定义为( C )。 DX
A.TYPE B.WORD C.NEAR D.FAR 2、 MOV AL,38H MOV BL,49H CALL SUBO INC AL DEC CL ┇
SUBO PROC ADD AL,BL MOV CL,AL
DAA RET
SUBO ENDP
上述程序段运行后,AL=________88H _____________,CL=________80H __________。 CXFX
3、FACT PROC
PUSH DX
MOV DX,AX CMP AX,0 JZ DONE DEC AX CALL FACT MUL DX POP DX RET DONE:MOV AX,1 POP DX RET
FACT ENDP
若执行以上子程序前,(AX)=5,则子程序完成的功能是: 求5!(或求5的阶乘) ,执行该子程序后(AX)= 120 。 CXFX
4、在一段汇编程序中多次调用另一段程序,用宏指令比用子程序实现起来。(占内存空间大,但速度快)。 DX
29
5、设在DAT单元存放一个-9~+9的字节数据,在SQRTAB数据区中存放了0~9的平方值,请用直接查表法编写一个子程序,在SQRTAB中查找出DAT单元中数据对应的平方值送SQR单元。并写出主程序的调用方式。 CX
数据段如下: DATA SEGMENT
DAT DB XXH
SQRTAB DB 0,1,4,9,...81 SQR DB? DATA ENDS 答:
DATA SEGMENT DAT DB XXH
SQRTAB DB 0,1,4,9,?,81 SQR DB?
DATA EMDS
STACL1 SEGMENT PARA STACK DW 20H DUP(?) STACK1 ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA
MOV DS,AX ┇
CALL SUBROT ┇
MOV AH,4CH INT 21H SUBROT PROC PUSH AX PUSH BX LEA BX,SQRTAB MOV AL,DAT TEST AL,80H JNS NEXT
NEG AL
NEXT: XLAT SQRTAB MOV SQR,AL POP BX POP AX RET
SUBROT ENDP
CODE ENDS END SRART
6、设在内存单元SQTAB首址开始存放了0~15的平方数表。要求用直接查表法
30
编一程序,求出A单元中给定数(<=15=的平方值送B单元保存。 BC
答: DATA SEGMENT
SQTAB DB 0,1,4,9,16,25,36,49,64,81 DB 100,121,144,169,196,225 A DB 12 B DB?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START PROC FAR PUSH DX XOR AX,AX PUSH AX
MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET SQTAB MOV AL,A XLAT
MOV B,AL RET
START ENDP
CODE ENDS END START
7、FUNCTION MACRO P1,P2,P3 MOV AX,P1 P2 P3 ENDM
请回答下列问题:
⑴上面程序段中,MACRO和ENDM是一对伪指令,在 宏 定义中,它们成对出现。
⑵通过调用语句FUNCTION 100,SUB,AX调用之后,AX寄存器中的内容为 99 。 CXFX
31