鱼C论坛

 找回密码
 立即注册
查看: 3904|回复: 17

[汇编作业] 这是实验9的作业,我用自己的方法写了一个,不过逻辑好像有问题,陷入了死循环,

[复制链接]
发表于 2014-9-14 17:30:59 | 显示全部楼层 |阅读模式
1鱼币
assume cs:code ,ds:date,  ss:stack

        date segment
                     db 'welcome to masm '
                         db 02h,24h,71h
            date ends
               
                stack segment
                  dw 8 dup(0)
                 stack ends
                 
                 code segment
                 start :
                 mov ax,date
                 mov ds,ax
                 mov ax,stack
                 mov ss,ax
                 mov sp,10h
                 mov si,0
                 mov di,0
                 mov bx,0
         mov cx,3                 
                 
                     s:
                         push cx
                         mov cx,10h
                              s0:
                                  mov ax,0b8072h;si是定位数据的,di是定位每个数据的属性的颜色,bx是3*16位数据的首位地址
                                  mov es,ax
                                  mov al,[di]
                                  mov es:[bx][si],al
                                  mov al,010h[di]
                                  mov es:[bx+1][si],al
                        loop s0
                       
                        pop cx
                        inc di
                        add si,2h
                        add bx,0a0h
                        loop s
                       
                        mov ax,4c00h
                        int 21h
                       
                        code ends
                       
                        end start
                         
                         
        【能不能帮忙指出啥地方错了,我找了好久,在线等啊,感激不尽】               

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-14 21:21:33 | 显示全部楼层
我用手机看的你的代码,ax只能存放16个二进制位,你却mov ax,0b8072,直接传输20个二进制位,告诉我,是谁给你这个勇气的!

点评

我很赞同!: 5.0
我很赞同!: 5
  发表于 2014-9-14 23:24

评分

参与人数 1荣誉 +2 鱼币 +10 贡献 +2 收起 理由
小靚同学Leon + 2 + 10 + 2 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-9-14 21:30:58 | 显示全部楼层
1236 发表于 2014-9-14 21:21
我用手机看的你的代码,ax只能存放16个二进制位,你却mov ax,0b8072,直接传输20个二进制位,告诉我,是谁 ...

额,谢了,的确是错了,但是还是有逻辑错误,我找找吧,呜呜,谢谢帮忙
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-14 23:02:51 | 显示全部楼层
s0循环里si,bx没有递增
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-9-15 07:32:51 | 显示全部楼层
thyz1982 发表于 2014-9-14 23:02
s0循环里si,bx没有递增

谢了,不过要是没有递增的话, 它怎么换行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-17 21:12:11 | 显示全部楼层
逆流杀 发表于 2014-9-15 07:32
谢了,不过要是没有递增的话, 它怎么换行

我觉的es的值得设置正确,然后在s0循环里inc di;add si,2,而不是在s循环里进行这两个操作,你看对不对?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-22 12:40:23 | 显示全部楼层
assume cs:code
a segment
  db 1,2,3,4,5,6,7,8
a ends
b segment
  db 1,2,3,4,5,6,7,6
b ends
c segment
  db 0,0,0,0,0,0,0,0
c ends
code segment
start:
        mov ax,a
        mov ds,ax
        mov bx,0
        mov cx:8
        s:
        mov al,ds:[bx]
        add al,ds:[bx + 8]
        mov ds:[bx + 16],al
        inc bx
        loop s

        mov 4c00h
        int 21h
code ends
end start
帮忙看看哪里错了?提示C没有定义
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-9-22 20:30:08 | 显示全部楼层
gyl 发表于 2014-9-22 12:40
assume cs:code
a segment
  db 1,2,3,4,5,6,7,8

你c没有事先声明,试试在cs,ds,后加上es:c,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-26 12:05:09 | 显示全部楼层
逆流杀 发表于 2014-9-22 20:30
你c没有事先声明,试试在cs,ds,后加上es:c,

首先谢谢你的回复。我想再问一句:C是没有声明,但是同样的A,B也没声明啊。为真么单独提示C呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-9-26 18:51:34 | 显示全部楼层
gyl 发表于 2014-9-26 12:05
首先谢谢你的回复。我想再问一句:C是没有声明,但是同样的A,B也没声明啊。为真么单独提示C呢?

assume cs:code , ds:a
a segment
  db 1,2,3,4,5,6,7,8


  db 1,2,3,4,5,6,7,6


  db 0,0,0,0,0,0,0,0
a ends
code segment
start:
        mov ax,a
        mov ds,ax
        mov bx,0
        mov cx,8
        s:
        mov al,ds:[bx]
        add al,ds:[bx + 8]
        mov ds:[bx + 16],al
        inc bx
        loop s

        mov ax,4c00h
        int 21h
code ends
end start


你对照一下,你那里错了,这个我编译了没问题。至于你说的a,b,c都没证明,为什么单独提示c,我想是以为,机器自动把它放到es,和ss中,再加一个,就没段寄存器给他了,我是这么想的,因为把c去掉,再将一些小错误改一下,的确可以编译出来,多一个就不行了,我再去帮你问问吧,我目前是这样想的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-27 10:51:33 | 显示全部楼层
逆流杀 发表于 2014-9-26 18:51
assume cs:code , ds:a
a segment
  db 1,2,3,4,5,6,7,8


请看一下《汇编语言》--第二版(王爽老师)这本书的实验5:编写、调试具有多个段的程序,第5题和第六题。是不是书本出错了?这本书错误百出,不知道是哪个环节出问题了。谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-9-28 09:05:50 | 显示全部楼层
gyl 发表于 2014-9-27 10:51
请看一下《汇编语言》--第二版(王爽老师)这本书的实验5:编写、调试具有多个段的程序,第5题和第六题 ...

http://bbs.fishc.com/forum.php?m ... p;page=1#pid2093119
这是我帮你问的,我之前找到了你说的这题,但是按照答案上的源代码,也是通过不了,所以就问厉害的人了,你自己去看看的,有的说是编译器的问题,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-29 08:54:20 | 显示全部楼层
原来是MASM版本问题!害得我郁闷了好多天。这种问题很打击人的积极性。因为找不到问题就觉得这个语言很神秘的样子。都几乎没信心继续学下去了。十分感谢你的耐心回复。我的QQ:422519061。如愿意请加我。很高兴认识你,又结交了一个良师益友!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-9-30 08:22:35 | 显示全部楼层
gyl 发表于 2014-9-29 08:54
原来是MASM版本问题!害得我郁闷了好多天。这种问题很打击人的积极性。因为找不到问题就觉得这个语言很神秘 ...

拉到我,我连渣都不是,嘿嘿
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-10-1 10:47:22 | 显示全部楼层
别谦虚。我是刚接触DEBUG和汇编的菜鸟。怎么说你也比我强。再说你这份热心肠最让我感动。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-10-2 16:40:34 | 显示全部楼层
gyl 发表于 2014-10-1 10:47
别谦虚。我是刚接触DEBUG和汇编的菜鸟。怎么说你也比我强。再说你这份热心肠最让我感动。

嘿嘿,一起努力吧,这里的朋友都很热心的,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-5-27 16:58:06 | 显示全部楼层
si的自增应该放在S0循环里,跳出S0循环后记得si初始化。我看了下应该不会出现死循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 14:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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