逆流杀 发表于 2014-9-14 17:30:59

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

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,
                                  mov es:,al
                                  mov al,010h
                                  mov es:,al
                        loop s0
                       
                        pop cx
                        inc di
                        add si,2h
                        add bx,0a0h
                        loop s
                       
                        mov ax,4c00h
                        int 21h
                       
                        code ends
                       
                        end start
                       
                       
        【能不能帮忙指出啥地方错了,我找了好久,在线等啊,感激不尽】               

1236 发表于 2014-9-14 21:21:33

我用手机看的你的代码,ax只能存放16个二进制位,你却mov ax,0b8072,直接传输20个二进制位,告诉我,是谁给你这个勇气的!{:5_91:}

逆流杀 发表于 2014-9-14 21:30:58

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

额,谢了,的确是错了,但是还是有逻辑错误,我找找吧,呜呜,谢谢帮忙

thyz1982 发表于 2014-9-14 23:02:51

s0循环里si,bx没有递增

逆流杀 发表于 2014-9-15 07:32:51

thyz1982 发表于 2014-9-14 23:02
s0循环里si,bx没有递增

谢了,不过要是没有递增的话, 它怎么换行

thyz1982 发表于 2014-9-17 21:12:11

逆流杀 发表于 2014-9-15 07:32
谢了,不过要是没有递增的话, 它怎么换行

我觉的es的值得设置正确,然后在s0循环里inc di;add si,2,而不是在s循环里进行这两个操作,你看对不对?

gyl 发表于 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:
      add al,ds:
      mov ds:,al
      inc bx
      loop s

      mov 4c00h
      int 21h
code ends
end start
帮忙看看哪里错了?提示C没有定义

逆流杀 发表于 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,

gyl 发表于 2014-9-26 12:05:09

逆流杀 发表于 2014-9-22 20:30
你c没有事先声明,试试在cs,ds,后加上es:c,

首先谢谢你的回复。我想再问一句:C是没有声明,但是同样的A,B也没声明啊。为真么单独提示C呢?

逆流杀 发表于 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:
      add al,ds:
      mov ds:,al
      inc bx
      loop s

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


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

gyl 发表于 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题和第六题。是不是书本出错了?这本书错误百出,不知道是哪个环节出问题了。谢谢

逆流杀 发表于 2014-9-28 09:05:50

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

http://bbs.fishc.com/forum.php?mod=viewthread&tid=53100&page=1#pid2093119
这是我帮你问的,我之前找到了你说的这题,但是按照答案上的源代码,也是通过不了,所以就问厉害的人了,你自己去看看的,有的说是编译器的问题,

gyl 发表于 2014-9-29 08:54:20

原来是MASM版本问题!害得我郁闷了好多天。这种问题很打击人的积极性。因为找不到问题就觉得这个语言很神秘的样子。都几乎没信心继续学下去了。十分感谢你的耐心回复。我的QQ:422519061。如愿意请加我。很高兴认识你,又结交了一个良师益友!

逆流杀 发表于 2014-9-30 08:22:35

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

拉到我,我连渣都不是,嘿嘿

gyl 发表于 2014-10-1 10:47:22

别谦虚。我是刚接触DEBUG和汇编的菜鸟。怎么说你也比我强。再说你这份热心肠最让我感动。

逆流杀 发表于 2014-10-2 16:40:34

gyl 发表于 2014-10-1 10:47
别谦虚。我是刚接触DEBUG和汇编的菜鸟。怎么说你也比我强。再说你这份热心肠最让我感动。

嘿嘿,一起努力吧,这里的朋友都很热心的,

丝雨人 发表于 2015-5-27 16:58:06

si的自增应该放在S0循环里,跳出S0循环后记得si初始化。我看了下应该不会出现死循环
页: [1]
查看完整版本: 这是实验9的作业,我用自己的方法写了一个,不过逻辑好像有问题,陷入了死循环,