0%

第四章_子程序设计练习题

段间间接调用

CALL DWORD PTR REG16/MEM16

双字DWORD PTR

注意与转移指令中的区别

JMP:

  1. 段内(CS不变)
    • 直接:
    • 间接:直接重新修改IP
  2. 段间(CS改变)
    • 直接:IP修改为偏移量,CS修改为段地址
    • 间接:低2为赋给IP,高2位赋给CS

堆栈操作中堆栈的变化

题1

设(SP)=80H,(BX)=0FFH;(AX)=1    

PUSH BX    

ADD BX,AX    

XOR BX,AX    

PUSH BX    

POP CX 

上述程序段运行后,(SP)=( ),(CX)=( )。

解析:

低地址放低字节,高地址放高字节

题2:子程序中堆栈寻址

下面的程序通过子程序调用,将数组ARRAY 的COUNT 个元素求和,并 将结果送SUM 单元。请补充完整程序。(3 分) DATA SEGMENT SUM DW ? ARRAY DW 10,20,30,40,50,60,70,80,90,100 COUNT EQU ($-ARRAY)/2 DATA ENDS STACK SEGMENT PARA STACK 'Stack' DW 64 DUP (0) STACK ENDS CODE SEGMENT ASSUME CS: CODE; DS: DATA; SS: STACK START: MOV AX, DATA MOV DS, AX MOV BX, OFFSET SUM PUSH BX MOV BX, OFFSET ARRAY PUSH BX MOV BX, OFFSET COUNT PUSH BX CALL SUMPRO ………

SUMPRO PROC FAR PUSH AX PUSH BX PUSH SI PUSH DI PUSH BP MOV BP, SP MOV SI, [BP+ _____ ] ;得到ARRAY 的地址 MOV DI, [BP+ _____ ] ;得到COUNT 的地址 MOV CX, DI MOV DI, [BP+ _____ ] ;得到SUM 的地址 XOR AX, AX NEXT:ADD AX, [SI] INC SI INC SI LOOP NEXT MOV [DI], AX ;送求和结果 POP BP POP DI POP SI POP BX POP AX RET SUMPRO ENDP CODE ENDS END START

解析:

在子程序中使用堆栈传参的时候往往首先需要通过压栈保护一些寄存器中的值,然后通过将BP与SP指向同一位置,通过BP加上偏移地址获得之前压入栈的参数

Powered By Valine
v1.5.2