汇编语言程序设计课后习题解答宋人杰版(6)

2020-05-05 16:55

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


汇编语言程序设计课后习题解答宋人杰版(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:锅内加药处理,在热水锅炉运行,中的应用

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: