CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:SSTACK START:MOV AX,DATA MOV DS,AX MOV AX,SSTACK MOV SS,AX
MOV SP,OFFSET TOS LEA BX,ARRAY
PUSH BX ;压入数组首地址 LEA BX,N
PUSH BX ;压入元素个数地址 LEA BX,COUNT
PUSH BX ;压入零元素数目地址 CALL COMPUTE MOV AH,4CH INT 21H
COMPUTE PROC FAR PUSH BP MOV BP,SP PUSH CX PUSH SI PUSH DI
MOV SI,[BP+10];得到数组首址 MOV DI,[BP+8];元素个数地址 MOV CX,[DI] ;得到元素个数 MOV DI,[BP+6] ;零元素数目地址 NEXT:CMP WORD PTR[SI],0 JNE COMMON
INC WORD PTR[DI] COMMON:ADD SI,2 LOOP NEXT POP DI POP SI POP CX POP BP RET 6 COMPUTE ENDP CODE ENDS
END START
CALL指令执行前堆栈情况如题图5.1;CALL指令执行后及RET指令执行前堆栈情况如题图5.2;RET指令执行后堆栈情况如题图5.3。
SS→SP→SS→┇SP→┇IP值CS值COUNT首址N的地址ARRAY首址0PSP段地址SS→SP→COUNT地址N的地址ARRAY首址0PSP段地址┇COUNT地址N的地址ARRAY首址0PSP段地址CALL指令执行前堆栈CALL指令执行后及RET执行前堆栈RET执行后状态
题图5.1 题图5.2 题图5.3
5.试编程计算两个数X和Y最小公倍数的子程序。 答:设AL中存储X,BL中存储Y
LCM PROC NEAR
PUSH DX CMP AL,BL JA NEXT
XCHG AL,BL ;保证AL中存放较大数 NEXT:MOV DL,AL ;保留AL值 MOV DH,BL ;保留BL值 LOOP1:AND AH,00H
DIV BL ;求AL MOD BL,值(余数)放AH CMP AH,0 JE OVER MOV AL,BL MOV BL,AH JMP LOOP1 OVER:MOV AL,DL
MUL DH ;X×Y→AX
DIV BL ;AL为求得的最小公倍数,BL中
为最大约数
POP DX RET LCM ENDP
6.试编制一个计算两个正整数X和Y最大公约数的子程序。 答:程序参见题5
7.设一维数组LIST1、LIST2、LIST3中分别存放了若干个单字长的带符号数,试编制程序使3个表中的数据都按降序排列。表中元素的个数分别在NUM1、NUM2、NUM3三个单元中。
答: DATA SEGMENT
LIST1 DW 1,2,3,4,5,6,7,8,9,10 NUM1 DW ($-LIST1)/2
LIST2 DW 10,20,30,40,50,60,7,80,90,100
NUM2 DW ($-LIST2)/2 LIST3
100,200,300,400,500,600,700,800,900,1000 NUM3 DW ($-LIST3)/2 TABLE DW 2 DUP(?) DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX
MOV TABLE,OFFSET LIST1 MOV TABLE+2,OFFSET NUM1 LEA BX,TABLE CALL SORT
MOV TABLE,OFFSET LIST2 MOV TABLE+2,OFFSET NUM2 LEA BX,TABLE CALL SORT
MOV TABLE,OFFSET LIST3 MOV TABLE+2,OFFSET NUM3 LEA BX,TABLE CALL SORT MOV AH,4CH INT 21H SORT PROC NEAR PUSH AX PUSH CX PUSH SI PUSH DI
MOV DI,[BX+2] ;取元素个数地址 MOV CX,[DI] ;取元素个数 LOOP1:MOV DX,CX MOV SI,[BX] LOOP2:MOV AX,[SI] CMP AX,[SI+2] JGE NEXT
XCHG AX,[SI+2] MOV [SI],AX NEXT:ADD SI,2 LOOP LOOP2 MOV CX,DX LOOP LOOP1 POP DI POP SI
DW
POP CX POP AX RET SORT ENDP CODE ENDS
END START
8.试编制一个通用多字节数求和的宏指令。 答: SUM MACRO BX,N,RESULT PUSH AX PUSH CX MOV AL,0 MOV CX,N NEXT:ADD AL,[BX] INC BX LOOP NEXT
MOV RESULT,AL POP CX POP AX ENDM
注意:BX为多字节数首地址,N为字节数数目,RESULT存储求得的和 9.已知宏定义如下:
DIF MACRO X,Y MOV AX,X SUB AX,Y ENDM
ABSDIF MACRO X1,X2,X3 LOCAL CONT PUSH AX DIF X1,X2 CMP AX,0 JGE CONT NEG AX CONT:MOV X3,AX POP AX ENDM
试展开以下调用,并判定调用是否有效。
(1) ABSDIF P1,P2,DISTANCE (2) ABSDIF [BX][SI],X[DI],CX
(3) ABSDIF [BX][SI],X[BX][SI],240H (4) ABSDIF AX,BX,CX (5) ABSDIF AX,AX,A答:(1)
+ PUSH AX
+ MOV AX,P1 + SUB AX,P2 + CMP AX,0 + JGE ??0000 + NEG AX
+ ??0000:MOV DISTANCE,AX + POP AX 该调用有效 (2)
+ PUSH AX
+ MOV AX,[BX][SI] + SUB AX,X[DI] + CMP AX,0 + JGE ??0000 + NEG AX + ??0000:MOV CX,AX + POP AX 该调用有效 (3)
+ PUSH AX
+ MOV AX,[BX][SI] + SUB AX,X[BX][SI] + CMP AX,0 + JGE ??0000 + NEG AX
+ ??0000:MOV 240H,AX + POP AX 该调用无效 (4)
+ PUSH AX + MOV AX,AX + SUB AX,BX + CMP AX,0 + JGE ??0000 + NEG AX + ??0000:MOV CX,AX + POP AX 该调用有效 (5)
+ PUSH AX + MOV AX,AX + SUB AX,AX + CMP AX,0 + JGE ??0000
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库汇编语言程序设计课后习题解答宋人杰版(6)在线全文阅读。
相关推荐: