131、展示调用 mWriteString 宏的语句 mWriteStr namePrompt 生成的展开代码
push edx
mov edx, OFFSET namePrompt
call WriteString
pop edx
132、编写一个名为mDumpMemx的宏,它接受一个参数,即变量的名称。该宏需要调用一个名为mDumpMem的宏,并将变量的偏移量、单元数量和单元大小传递给它。展示对mDumpMemx宏的调用。
以下是实现 mDumpMemx 宏的代码:
mDumpMemx MACRO varName:REQ
mDumpMem OFFSET varName, LENGTHOF varName, TYPE varName
ENDM
示例调用
.data
array DWORD 1000h,2000h,3000h,4000h
.code
mDumpMemx array
133、给出一个宏参数具有默认参数初始化的示例。
例如, mWriteln 宏可以提供一个包含单个空格的字符串作为其默认参数。其定义如下:
mWriteln MACRO text:=<" ">
mWrite text
call Crlf
ENDM
若调用时不提供参数,它仍会打印一个空格并换行。
134、编写一个使用IF、ELSE和ENDIF指令的简短示例。
示例代码如下:
.data
X DWORD 0
op1 DWORD 2 ; test data
op2 DWORD 4 ; test data
op3 DWORD 5 ; test data
.code
mov eax,op1
mov ebx,op2
mov ecx,op3
.WHILE eax < ebx
inc eax
.IF eax == ecx
mov X,2
.ELSE
mov X,3
.ENDIF
.ENDW
135、编写一个简短的宏,展示当宏参数嵌入到字面字符串中时 & 运算符的使用。
以下是一个示例宏:
ShowWarning MACRO message
mWrite "&message"
ENDM
该宏接收一个文本参数 message ,使用 & 运算符将其嵌入到字面字符串中,然后传递给 mWrite 宏。
136、假设以下 mLocate 宏定义:mLocate MACRO xval,yval IF xval LT 0 ;; xval < 0? EXITM ;; 如果是,退出 ENDIF IF yval LT 0 ;; yval < 0? EXITM ;; 如果是,退出 ENDIF mov bx,0 ;; 视频页面 0 mov ah,2 ;; 定位光标 mov dh,yval mov dl,xval int 10h ;; 调用 BIOS ENDM 展示以下每条语句展开宏时预处理器生成的源代码:.data row BYTE 15 col BYTE 60.code mLocate -2,20 mLocate 10,20 mLocate col,row
-
mLocate -2,20:由于xval = -2 < 0,宏执行EXITM退出,无代码生成。 -
mLocate 10,20:
asm mov bx,0 mov ah,2 mov dh,20 mov dl,10 int 10h -
mLocate col,row:
asm mov bx,0 mov ah,2 mov dh,row mov dl,col int 10h
137、创建一个宏,该宏等待用户按键并返回所按的键。该宏应包含用于存储 ASCII 码和键盘扫描码的参数。编写一个程序来测试你的宏。例如,以下代码等待按键;当返回时,两个参数将包含 ASCII 码和扫描码:.data ascii BYTE?.code mReadkey ascii, scan
以下是实现该功能的代码:
; mReadkey 宏定义
mReadkey MACRO ascii, scan
pushad
call ReadChar
mov ascii, al
mov scan, ah
popad
ENDM
; 测试程序
INCLUDE Irvine32.inc
.data
ascii BYTE ?
scan BYTE ?
.code
main PROC
mReadkey ascii, scan ; 可以在这里添加代码来显示 ascii 和 scan 的值以验证结果
exit
main ENDP
END main
上述代码定义了 mReadkey 宏,它调用 ReadChar 函数获取按键的 ASCII 码和扫描码,并将它们分别存储到传入的参数中。然后编写了一个简单的测试程序来调用该宏。
138、编写一个名为 mMove32 的宏,该宏接收两个 32 位内存操作数。宏应将源操作数移动到目标操作数。编写一个程序来测试你的宏。
以下是实现 mMove32 宏及测试程序的示例代码:
.MODEL SMALL
.STACK 100H
.DATA
source DWORD 12345678h
destination DWORD ?
.CODE

824

被折叠的 条评论
为什么被折叠?



