主题:[讨论]宏汇编问题
麻烦大家帮忙看一下下面我写的代码,我不知道哪里出错了,谢谢!
;----------------------------------------------------------
;版权信息:
;作者信息:spirit
;编制日期:
;程序功能:求两个多字节数据的绝对值;求两个多字节数据之和
;
;
;使用方法:
;
;入口信息:两个多字节数据分别存放于DATA1和DATA2单元,数据长度存放于LEN单元中
;
;出口信息:绝对值之和存在于SUM开始的连续单元中
;
;版本信息:
;----------------------------------------------------------
;修改信息:(对应版本,修改日期,修改者,修改原因,修改位置)
;-----------------------------------------------------------
sseg segment stack ;定义堆栈段
stktop dw 512 dup(?)
;堆栈段有512字(1024字节)空间
sseg ends ;堆栈段结束
;
dseg segment ;定义数据段
DATA1 dw 1,2,3
DATA2 dw -1,-2,-3
LEN dw 3
SUM dw 50 dup(0)
dseg ends
;
code segment 'code' ;定义代码段
assume cs:code,ds:dseg
assume ss:sseg
start: mov ax,dseg ;建立DS段地址
mov ds,ax
mov ax,sseg
mov ss,ax
mov sp,size stktop
main:
mov ax,data1
mov bx,data2
mov cx,len
mov dx,sum
MYABS ax,bx,cx,dx ;调用求绝对值子程序
mov ax,4c00h
int 21h ;利用功能调用返回DOS
MYABS macro data1,data2,len,sum ;求绝对值
local second,process
first: push data1
jns second
neg data1
second: and data2,data2
jns process
neg data2
process:RESULT ;调用求和
mov sum,data1
pop data1
inc data1
inc data1
inc data2
inc data2
inc sum
inc sum
loop first
RESULT macro
add data1,data2
ret
endm
endm
code ends ;代码段结束
end start
;汇编结束,同时指明程序起始点
用ml+link后的结果:
e6-2.asm(43) : error A2008: syntax error : ax
我不明白为什么会是这样的,谢谢大家帮忙啊,初学汇编啥也不懂
;----------------------------------------------------------
;版权信息:
;作者信息:spirit
;编制日期:
;程序功能:求两个多字节数据的绝对值;求两个多字节数据之和
;
;
;使用方法:
;
;入口信息:两个多字节数据分别存放于DATA1和DATA2单元,数据长度存放于LEN单元中
;
;出口信息:绝对值之和存在于SUM开始的连续单元中
;
;版本信息:
;----------------------------------------------------------
;修改信息:(对应版本,修改日期,修改者,修改原因,修改位置)
;-----------------------------------------------------------
sseg segment stack ;定义堆栈段
stktop dw 512 dup(?)
;堆栈段有512字(1024字节)空间
sseg ends ;堆栈段结束
;
dseg segment ;定义数据段
DATA1 dw 1,2,3
DATA2 dw -1,-2,-3
LEN dw 3
SUM dw 50 dup(0)
dseg ends
;
code segment 'code' ;定义代码段
assume cs:code,ds:dseg
assume ss:sseg
start: mov ax,dseg ;建立DS段地址
mov ds,ax
mov ax,sseg
mov ss,ax
mov sp,size stktop
main:
mov ax,data1
mov bx,data2
mov cx,len
mov dx,sum
MYABS ax,bx,cx,dx ;调用求绝对值子程序
mov ax,4c00h
int 21h ;利用功能调用返回DOS
MYABS macro data1,data2,len,sum ;求绝对值
local second,process
first: push data1
jns second
neg data1
second: and data2,data2
jns process
neg data2
process:RESULT ;调用求和
mov sum,data1
pop data1
inc data1
inc data1
inc data2
inc data2
inc sum
inc sum
loop first
RESULT macro
add data1,data2
ret
endm
endm
code ends ;代码段结束
end start
;汇编结束,同时指明程序起始点
用ml+link后的结果:
e6-2.asm(43) : error A2008: syntax error : ax
我不明白为什么会是这样的,谢谢大家帮忙啊,初学汇编啥也不懂