鱼C论坛

 找回密码
 立即注册
查看: 2101|回复: 9

[已解决]编译器又无法编译了

[复制链接]
发表于 2022-5-26 20:01:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
大佬们,这哪里出问题了,我检查了代码也没出问题啊
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,[si+3+bx]
        and al,11011111b
        mov [si+3+bx],al
        inc bx
        loop s1

        pop cx
        add si,10H
        loop s0

        mov ax,4c00h
        int 21h
codes ends

end start

捕获.JPG
最佳答案
2022-5-26 21:04:41
        你的代码我在 DOSBOX 下用 MASM 5.10B 可以正常编译,没有任何问题。
        这两句
        mov al,[si+3+bx]

        mov [si+3+bx],al
        改为
        mov al,byte ptr [si+3+bx]

        mov byte ptr [si+3+bx],al
        试试看呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-26 20:18:41 | 显示全部楼层
不建议用这种方式编译
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-26 21:04:41 | 显示全部楼层    本楼为最佳答案   
        你的代码我在 DOSBOX 下用 MASM 5.10B 可以正常编译,没有任何问题。
        这两句
        mov al,[si+3+bx]

        mov [si+3+bx],al
        改为
        mov al,byte ptr [si+3+bx]

        mov byte ptr [si+3+bx],al
        试试看呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-26 21:37:29 | 显示全部楼层
jackz007 发表于 2022-5-26 21:04
你的代码我在 DOSBOX 下用 MASM 5.10B 可以正常编译,没有任何问题。
        这两句

可以了,这是为啥呢,为啥改下就能行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-26 21:41:40 | 显示全部楼层
我把栈段
stacks segment
dw 0,0,0,0,0,0,0,0
stacks ends
改成
stacks segment
dw 0
stacks ends

可以吗,后面栈顶SP=2?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-26 22:00:06 | 显示全部楼层
本帖最后由 jackz007 于 2022-5-26 22:10 编辑


       像下面这样定义堆栈段,你无需用任何代码初始化 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[si+3+bx]
        and al,11011111b
        mov byte ptr[si+3+bx],al
        inc bx
        loop s1

        pop cx
        add si,10H
        loop s0

        mov ax,4c00h
        int 21h
codes ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-29 16:31:53 | 显示全部楼层
jackz007 发表于 2022-5-26 22:00
像下面这样定义堆栈段,你无需用任何代码初始化 SS 和 SP 值,而且,你会发现,连接时,前面给 ...

大佬,有什么方法解决编译器无法编译的问题吗,自从我发这个帖子之后,编译器什么也编译不了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-29 16:47:09 | 显示全部楼层
竹逸 发表于 2022-5-29 16:31
大佬,有什么方法解决编译器无法编译的问题吗,自从我发这个帖子之后,编译器什么也编译不了

       编译器给出的响应信息是什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-7 20:12:04 | 显示全部楼层
jackz007 发表于 2022-5-29 16:47
编译器给出的响应信息是什么?

学汇编容易晕头转向,我现在都糊涂了又回头从新认认真真的从新学习一下,认真跟着课件做练习题,这样到后面就不会出现学的越多越迷糊了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-7 20:32:00 From FishC Mobile | 显示全部楼层
竹逸 发表于 2022-6-7 20:12
学汇编容易晕头转向,我现在都糊涂了又回头从新认认真真的从新学习一下,认真跟着课件做练习题,这样到后 ...

做习题固然重要,但是,关键是要理解和消化,否则的话,就是做再多的练习也不过是应付差事,自我安慰而已。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 23:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表