编译器又无法编译了
大佬们,这哪里出问题了,我检查了代码也没出问题啊{:5_107:}assume cs:codes, ds:datas, ss:stacks
stacks segment
dw 0,0,0,0,0,0,0,0
stacks ends
datas segment
db '1. display......'
db '2. browse.......'
db '3. replace......'
db '4. modify.......'
datas ends
codes segment
start:
mov ax,stacks
mov ss,ax
mov sp,10H
mov ax,datas
mov ds,ax
mov si,0
mov cx,4
s0:
push cx
mov bx,0
mov cx,4
s1:
mov al,
and al,11011111b
mov ,al
inc bx
loop s1
pop cx
add si,10H
loop s0
mov ax,4c00h
int 21h
codes ends
end start
不建议用这种方式编译 你的代码我在 DOSBOX 下用 MASM 5.10B 可以正常编译,没有任何问题。
这两句
mov al,
mov ,al
改为
mov al,byte ptr
mov byte ptr ,al
试试看呢 jackz007 发表于 2022-5-26 21:04
你的代码我在 DOSBOX 下用 MASM 5.10B 可以正常编译,没有任何问题。
这两句
可以了,这是为啥呢,为啥改下就能行了{:5_94:} 我把栈段
stacks segment
dw 0,0,0,0,0,0,0,0
stacks ends
改成
stacks segment
dw 0
stacks ends
可以吗,后面栈顶SP=2? 本帖最后由 jackz007 于 2022-5-26 22:10 编辑
竹逸 发表于 2022-5-26 21:41
我把栈段
改成
像下面这样定义堆栈段,你无需用任何代码初始化 SS 和 SP 值,而且,你会发现,连接时,前面给出的无堆栈段的警告信息也已经消失,debug 进去,你更会发现,SS、SP 是已经就绪的。
堆栈在一个程序中是最关键的数据存储区,必须要定义得足够大,宁可定义大了空着,也绝不可以不够用,否则的话,一旦堆栈空间被撑满,你的程序一定会奔溃!
assume cs:codes , ds:datas
stacks segment stack
dw 400h dup(0)
stacks ends
datas segment
db '1. display......'
db '2. browse.......'
db '3. replace......'
db '4. modify.......'
datas ends
codes segment
start:mov ax,datas
mov ds,ax
mov si,0
mov cx,4
s0:
push cx
mov bx,0
mov cx,4
s1:
mov al,byte ptr
and al,11011111b
mov byte ptr,al
inc bx
loop s1
pop cx
add si,10H
loop s0
mov ax,4c00h
int 21h
codes ends
end start jackz007 发表于 2022-5-26 22:00
像下面这样定义堆栈段,你无需用任何代码初始化 SS 和 SP 值,而且,你会发现,连接时,前面给 ...
大佬,有什么方法解决编译器无法编译的问题吗,自从我发这个帖子之后,编译器什么也编译不了{:5_99:} 竹逸 发表于 2022-5-29 16:31
大佬,有什么方法解决编译器无法编译的问题吗,自从我发这个帖子之后,编译器什么也编译不了
编译器给出的响应信息是什么? jackz007 发表于 2022-5-29 16:47
编译器给出的响应信息是什么?
学汇编容易晕头转向,我现在都糊涂了又回头从新认认真真的从新学习一下,认真跟着课件做练习题,这样到后面就不会出现学的越多越迷糊了{:5_104:} 竹逸 发表于 2022-6-7 20:12
学汇编容易晕头转向,我现在都糊涂了又回头从新认认真真的从新学习一下,认真跟着课件做练习题,这样到后 ...
做习题固然重要,但是,关键是要理解和消化,否则的话,就是做再多的练习也不过是应付差事,自我安慰而已。
页:
[1]