我正在尝试学习如何在Assembly中编写输出 我仅为此目的将原始代码与此代码分开 我计划在成功录制之后实施这个...... 请帮忙!谢谢大家提前
此代码中存在大量错误 但首先我想知道错误A2071的原因:初始化程序的大小对于指定的大小而言太大(第10行)
TITLE PHW05 (s151619hw05.asm)
;
INCLUDE Irvine32.inc
.data
startmessage db "Start$"
msg db "display this message$"
FileName db "abcd.txt"
handle dw ?
.code
main PROC
mov ax, @data
mov ds, ax
mov dx,offset startmessage
mov ah, 09h
int 21h
mov dx,offset Filename
xor cx,cx
mov ah, 3ch
int 21h
mov dx, offset filename
mov al,2
mov ah,3dh
int 21h
mov handle, ax
mov dx,offset msg
mov bx,handle
mov cx,21
mov ah,40h
int 21h
mov bx,handle
mov ah,3eh
int 21h
;lea dx, offset msg
;mov ah, 40h
;mov cx,20
;int 21h
exit
main ENDP
END main
更新: 我试图改变第10行 从 FileName db“s151619.txt” 至 FileName db“s151619.txt”,0 和错误A2071:初始化程序的大小对于指定的大小而言太大 现在出现在11号线......
答案 0 :(得分:3)
您包括Irvine32.inc
,但请勿使用它。因此删除它以获得纯16位代码,因为Irvine32.inc
本身包含SmallWin.inc
,其中包含以下安装指令:
.686P ; Pentium Pro or later
.MODEL flat, stdcall
这些将模式设置为Pentium Pro
指令,使用32位FLAT
模型。例如,使用
AX
设置为32位数据段值
mov ax, @data` ; 32-bit value to 16-bit register --- Don't work
会给你一个像这样的错误
错误A2048:操作数必须大小相同:2 - 4
以及其他几个关于32位模式的其他指令。
第11行出现问题是由于'句柄'之间发生了名称冲突。在handle dw ?
和&#39; HANDLE&#39;来自HANDLE TEXTEQU <DWORD>
的{{1}}。因此在组装时,您的变量定义评估为
SmallWin.inc
无效并且会给您错误。
<强>解决方案:强>
DWORD dw ?
INCLUDE Irvine32.inc
- 设置16位模式.MODEL SMALL, STDCALL
替换为DOS退出调用exit