我用visual assembly汇编软件编译为什么一直是out of memory?

superdiving 2009-12-26 02:39:59
选择的编译器是masm,但是按F5编译时,一直提示“c.asm(16): Out of memory”这是怎么回事?难道是代码错误?
代码如下:
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
NEXTLINE MACRO ;显示换行宏
MOV AH,2
MOV DL,10
INT 21H
MOV AH,2
MOV DL,13
INT 21H
ENDM
START:
MOV AX,DATAS
MOV DS,AX
MOV BX,0
INPUT1:
MOV AH,1 ;从键盘输入一个字符
INT 21H

CMP AL,'+' ;判断是否为+
JZ ADDITION
CMP AL,'-' ;判断是否为-
JZ SUBTRATION
CMP AL,'*' ;判断是否为*
JZ MULTIPLICATION
CMP AL,'/' 判断是否为/
JZ DIVISION
CMP AL,'=' 判断是否为=
JZ RESULT
CMP AL,58 判断输入是否为数字
JS L1
JMP INPUT1
L1:
CMP AL,47节
JNS L2
JMP INPUT1
L2:
SUB AL,48 如果输入为数字,将数值计入BX
MOV CL,AL
MOV AX,BX
MOV CH,10
MUL CH
ADD AL,CL
MOV BX,AX
JMP INPUT1


ADDITION: 输入+后,进入加法运算
MOV DX,0
INPUT2:
MOV AH,1 从键盘输入字符
INT 21H

CMP AL,'+' 判断是否为+
JZ L23
CMP AL,'-' 判断是否为-
JZ L24
CMP AL,'*' 判断是否为*
JZ L25
CMP AL,'/' 判断是否为/
JZ L26
CMP AL,'=' 判断是否为=
JZ L27
CMP AL,58 判断是否为数字
JS L21
JMP INPUT2
L21:
CMP AL,47
JNS L22
JMP INPUT2 如果不是数字,则跳转到INPUT2
L22:
SUB AL,48 将输入字符转换为数值
MOV CL,AL
MOV AX,DX
MOV CH,10
MUL CH
ADD AL,CL
MOV DX,AX
JMP INPUT2
L23:
ADD BX,DX 执行加运算
JMP ADDITION
L24:
ADD BX,DX
JMP SUBTRATION
L25:
ADD BX,DX
JMP MULTIPLICATION
L26:
ADD BX,DX
JMP DIVISION
L27:
ADD BX,DX
JMP RESULT


SUBTRATION: 如果输入-,则执行减法
MOV DX,0
INPUT3:
MOV AH,1
INT 21H

CMP AL,'+' 判断是否为+
JZ L33
CMP AL,'-' 判断是否为-
JZ L34
CMP AL,'*' 判断是否为*
JZ L35
CMP AL,'/' 判断是否为/
JZ L36
CMP AL,'=' 判断是否为=
JZ L37
CMP AL,58 判断是否为数字
JS L31
JMP INPUT3
L31:
CMP AL,47
JNS L32
JMP INPUT3
L32:
SUB AL,48 将字符转换为数值
MOV CL,AL
MOV AX,DX
MOV CH,10
MUL CH
ADD AL,CL
MOV DX,AX
JMP INPUT3
L33:
SUB BX,DX 执行减法操作
JMP ADDITION
L34:
SUB BX,DX
JMP SUBTRATION
L35:
SUB BX,DX
JMP MULTIPLICATION
L36:
SUB BX,DX
JMP DIVISION
L37:
SUB BX,DX
JMP RESULT


MULTIPLICATION:
MOV DX,0
INPUT4:
MOV AH,1
INT 21H

CMP AL,'+'
JZ L43
CMP AL,'-'
JZ L44
CMP AL,'*' 判断是否为*
JZ L45
CMP AL,'/' 判断是否为/
JZ L46
CMP AL,'=' 判断是否为=
JZ L47
CMP AL,58 判断是否为数字
JS L41
JMP INPUT4
L41:
CMP AL,47
JNS L42
JMP INPUT4
L42:
SUB AL,48 将字符转换为数值
MOV CL,AL
MOV AX,DX 将字输入数字加入数值
MOV CH,10
MUL CH
ADD AL,CL
MOV DX,AX
JMP INPUT4
L43:
MOV AX,BX 将BX移入AX
MUL DX 与DX中的数进行乘运算
MOV BX,AX 将AX中的数值返回BX
JMP ADDITION
L44:
MOV AX,BX 将BX移入AX
MUL DX 与DX中的数进行乘运算
MOV BX,AX 将AX中的数值返回BX
JMP SUBTRATION
L45:
MOV AX,BX 将BX移入AX
MUL DX 与DX中的数进行乘运算
MOV BX,AX 将AX中的数值返回BX
JMP MULTIPLICATION
L46:
MOV AX,BX 将BX移入AX
MUL DX 与DX中的数进行乘运算
MOV BX,AX 将AX中的数值返回BX
JMP DIVISION
L47:
MOV AX,BX 将BX移入AX
MUL DX 与DX中的数进行乘运算
MOV BX,AX 将AX中的数值返回BX
JMP RESULT

DIVISION:
MOV DX,0
INPUT5:
MOV AH,1
INT 21H

CMP AL,'+'
JZ L53
CMP AL,'-'
JZ L54
CMP AL,'*'
JZ L55
CMP AL,'/'
JZ L56
CMP AL,'='
JZ L57
CMP AL,58
JS L51
JMP INPUT5
L51:
CMP AL,47
JNS L52
JMP INPUT5
L52:
SUB AL,48
MOV CL,AL
MOV AX,DX
MOV CH,10
MUL CH
ADD AL,CL
MOV DX,AX
JMP INPUT5
L53:
MOV AX,BX
DIV DX
MOV AH,0
MOV BX,AX
JMP ADDITION
L54:
MOV AX,BX
DIV DL
MOV AH,0
MOV BX,AX
JMP SUBTRATION
L55:
MOV AX,BX
DIV DL
MOV AH,0
MOV BX,AX
JMP MULTIPLICATION
L56:
MOV AX,BX
DIV DL
MOV AH,0
MOV BX,AX
JMP DIVISION
L57:
MOV AX,BX
DIV DL
MOV AH,0
MOV BX,AX
JMP RESULT
RESULT: 显示结果
MOV CH,10
MOV CL,100
R1: 将BX中的计算结果以十进制输出
MOV AX,BX
DIV CL
MOV DL,AL
MOV DH,AH
MOV AL,AH
MOV AH,0
MOV BX,AX
ADD DL,48
MOV AH,2
INT 21H
MOV AH,0
MOV AL,CL
DIV CH
MOV CL,AL
CMP CL,1
JZ R2
JMP R1
R2:
MOV DL,DH
ADD DL,48
MOV AH,2
INT 21H
S2:
NEXTLINE
LEA DX,STRING 询问是否继续输入
MOV AH,9
INT 21H

MOV AH,1
INT 21H
CMP AL,'y' 输入y则跳转到S1
JE S1
CMP AL,'n' 输入n则跳转到S3,即结束程序
JE S3
JNE S2
S3:
MOV AH,4CH
INT 21H
CODES ENDS
...全文
715 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ymwjz 2010-08-02
  • 打赏
  • 举报
回复
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
NEXTLINE MACRO ;显示换行宏
MOV AH,2
MOV DL,10
INT 21H
MOV AH,2
MOV DL,13
INT 21H
ENDM
START:
MOV AX,DATAS
MOV DS,AX
MOV BX,0
INPUT1:
MOV AH,1 ;从键盘输入一个字符
INT 21H

CMP AL,'+' ;判断是否为+
JZ ADDITION
CMP AL,'-' ;判断是否为-
JZ SUBTRATION
CMP AL,'*' ;判断是否为*
JZ MULTIPLICATION
CMP AL,'/';判断是否为/
JZ DIVISION
CMP AL,'=';判断是否为=
JZ RESULT
CMP AL,58;判断输入是否为数字
JS L1
JMP INPUT1
L1:
CMP AL,47节
JNS L2
JMP INPUT1
L2:
SUB AL,48;如果输入为数字,将数值计入BX
MOV CL,AL
MOV AX,BX
MOV CH,10
MUL CH
ADD AL,CL
MOV BX,AX
JMP INPUT1


ADDITION:;输入+后,进入加法运算
MOV DX,0
INPUT2:
MOV AH,1;从键盘输入字符
INT 21H

CMP AL,'+';判断是否为+
JZ L23
CMP AL,'-';判断是否为-
JZ L24
CMP AL,'*' ;判断是否为*
JZ L25
CMP AL,'/' ;判断是否为/
JZ L26
CMP AL,'=' ;判断是否为=
JZ L27
CMP AL,58 ;判断是否为数字
JS L21
JMP INPUT2
L21:
CMP AL,47
JNS L22
JMP INPUT2 ;如果不是数字,则跳转到INPUT2
L22:
SUB AL,48;将输入字符转换为数值
MOV CL,AL
MOV AX,DX
MOV CH,10
MUL CH
ADD AL,CL
MOV DX,AX
JMP INPUT2
L23:
ADD BX,DX;执行加运算
JMP ADDITION
L24:
ADD BX,DX
JMP SUBTRATION
L25:
ADD BX,DX
JMP MULTIPLICATION
L26:
ADD BX,DX
JMP DIVISION
L27:
ADD BX,DX
JMP RESULT


SUBTRATION: ;如果输入-,则执行减法
MOV DX,0
INPUT3:
MOV AH,1
INT 21H

CMP AL,'+' ;判断是否为+
JZ L33
CMP AL,'-' ;判断是否为-
JZ L34
CMP AL,'*' ;判断是否为*
JZ L35
CMP AL,'/' ;判断是否为/
JZ L36
CMP AL,'=' ;判断是否为=
JZ L37
CMP AL,58 ;判断是否为数字
JS L31
JMP INPUT3
L31:
CMP AL,47
JNS L32
JMP INPUT3
L32:
SUB AL,48 ;将字符转换为数值
MOV CL,AL
MOV AX,DX
MOV CH,10
MUL CH
ADD AL,CL
MOV DX,AX
JMP INPUT3
L33:
SUB BX,DX ;执行减法操作
JMP ADDITION
L34:
SUB BX,DX
JMP SUBTRATION
L35:
SUB BX,DX
JMP MULTIPLICATION
L36:
SUB BX,DX
JMP DIVISION
L37:
SUB BX,DX
JMP RESULT


MULTIPLICATION:
MOV DX,0
INPUT4:
MOV AH,1
INT 21H

CMP AL,'+'
JZ L43
CMP AL,'-'
JZ L44
CMP AL,'*' ;判断是否为*
JZ L45
CMP AL,'/' ;判断是否为/
JZ L46
CMP AL,'=' ;判断是否为=
JZ L47
CMP AL,58 ;判断是否为数字
JS L41
JMP INPUT4
L41:
CMP AL,47
JNS L42
JMP INPUT4
L42:
SUB AL,48 ;将字符转换为数值
MOV CL,AL
MOV AX,DX ;将字输入数字加入数值
MOV CH,10
MUL CH
ADD AL,CL
MOV DX,AX
JMP INPUT4
L43:
MOV AX,BX ;将BX移入AX
MUL DX ;与DX中的数进行乘运算
MOV BX,AX ;将AX中的数值返回BX
JMP ADDITION
L44:
MOV AX,BX ;将BX移入AX
MUL DX ;与DX中的数进行乘运算
MOV BX,AX ;将AX中的数值返回BX
JMP SUBTRATION
L45:
MOV AX,BX ;将BX移入AX
MUL DX ;与DX中的数进行乘运算
MOV BX,AX ;将AX中的数值返回BX
JMP MULTIPLICATION
L46:
MOV AX,BX ;将BX移入AX
MUL DX ;与DX中的数进行乘运算
MOV BX,AX ;将AX中的数值返回BX
JMP DIVISION
L47:
MOV AX,BX ;将BX移入AX
MUL DX ;与DX中的数进行乘运算
MOV BX,AX ;将AX中的数值返回BX
JMP RESULT

DIVISION:
MOV DX,0
INPUT5:
MOV AH,1
INT 21H

CMP AL,'+'
JZ L53
CMP AL,'-'
JZ L54
CMP AL,'*'
JZ L55
CMP AL,'/'
JZ L56
CMP AL,'='
JZ L57
CMP AL,58
JS L51
JMP INPUT5
L51:
CMP AL,47
JNS L52
JMP INPUT5
L52:
SUB AL,48
MOV CL,AL
MOV AX,DX
MOV CH,10
MUL CH
ADD AL,CL
MOV DX,AX
JMP INPUT5
L53:
MOV AX,BX
DIV DX
MOV AH,0
MOV BX,AX
JMP ADDITION
L54:
MOV AX,BX
DIV DL
MOV AH,0
MOV BX,AX
JMP SUBTRATION
L55:
MOV AX,BX
DIV DL
MOV AH,0
MOV BX,AX
JMP MULTIPLICATION
L56:
MOV AX,BX
DIV DL
MOV AH,0
MOV BX,AX
JMP DIVISION
L57:
MOV AX,BX
DIV DL
MOV AH,0
MOV BX,AX
JMP RESULT
RESULT: ;显示结果
MOV CH,10
MOV CL,100
R1: ;将BX中的计算结果以十进制输出
MOV AX,BX
DIV CL
MOV DL,AL
MOV DH,AH
MOV AL,AH
MOV AH,0
MOV BX,AX
ADD DL,48
MOV AH,2
INT 21H
MOV AH,0
MOV AL,CL
DIV CH
MOV CL,AL
CMP CL,1
JZ R2
JMP R1
R2:
MOV DL,DH
ADD DL,48
MOV AH,2
INT 21H
S2:
NEXTLINE
LEA DX,STRING ;询问是否继续输入
MOV AH,9
INT 21H

MOV AH,1
INT 21H
CMP AL,'y' ;输入y则跳转到S1
JE S1
CMP AL,'n' ;输入n则跳转到S3,即结束程序
JE S3
JNE S2
S3:
MOV AH,4CH
INT 21H
CODES ENDS

****
;以上的错误还有12条再继续检查
cnzdgs 2009-12-26
  • 打赏
  • 举报
回复
只有第1条注释是对的,其它都有问题。注释前面要用半角(英文)分号“;”,不能用全角(中文)分号“;”。
BAYNPU 2009-12-26
  • 打赏
  • 举报
回复
有好几注释都没加上分号“;”这样肯定会报错。
superdiving 2009-12-26
  • 打赏
  • 举报
回复
哪位高手帮忙解答下啊,急!

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧