90182si 发表于 2017-12-19 20:55

有这样一段代码,当调整它们的顺序后,发生了不可思议的事!!!

本帖最后由 90182si 于 2017-12-19 21:04 编辑

我在写王爽老师布置的课程设计一,其中的dtoc程序
dtoc:
      push ax
      push dx
      push cx
      push si
      push di
      mov si,0      
tw:      mov cx,10
      call divdw
               
      add cx,48;
      push cx    ;
      or ax,dx
      cmp ax,0
      je ok;就是这四句,如果我把push cx后三句写到add cx,48之前就可以运行,但是有0就跳转了。
于是我先让cx入栈,判断ax,dx是否都为0再跳转,但事实上这样并不能运行,我不知道为什么。。求大佬解惑
                        
      inc si
      jmp tw
ok: mov cx,si
of: pop ax
      mov ,ax
      inc di
      loop of
      pop di
      pop si
      pop cx
      pop dx
      pop ax
      ret

13426913705 发表于 2017-12-19 21:15

真·标题党

90182si 发表于 2017-12-19 21:19

13426913705 发表于 2017-12-19 21:15
真·标题党

我这不是为了有人能帮帮我嘛

whklhh 发表于 2017-12-19 21:21

{:301_1009:}所以你“并不能运行”的具体表现是什么,是编译报错还是运行到这里会停止。。。自己调试试试呗_(:з」∠)_监控着寄存器的变化

fanvalen 发表于 2017-12-19 22:26

本帖最后由 fanvalen 于 2017-12-19 22:27 编辑

没有找到你说的设计一的出处,不过你可以百度搜王爽汇编第几版答案找到对应的章节查看
一些问题以及说明:



1



第一种思路的代码有错,无法得到正确的实验结果,我刚开始用的是第一种思路,

我想错误就在于寄存器的冲突的问题没有解决好。我便写了第二中思路的代码,

这个代码算是实验

7

和实验

9

的结合,先把要显示到屏幕上的那些数据以相同的

格式存放在

table

段中,然后直接将

table

段中的内容一个字节一个字节地复制到

显示缓冲区的偶地址上,

奇地址存放字符的颜色属性白色

07h



因此不用调用子程



show_str





2

、代码

2

的一个缺点是有可能造成内存空间资源浪费,因为比代码

1

多定义了一个

672

字节的内存空间。

优点是程序很清晰,

可以看成一块块的,

每块有不同的作用,

在用

debug

跟踪时,如果发现问题,比较方便进行查找。
页: [1]
查看完整版本: 有这样一段代码,当调整它们的顺序后,发生了不可思议的事!!!