我是一个菜鸟 我有一个问题 我刚来

vanhanlen 2007-08-18 06:15:00
刚接触汇编,就有了很多问题,但痛并快乐着。。。。
问题:编程计算下面8个数据的和,所得结果存入寄存器AX中(0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H)。
由于当时我还没学到DW(当然现在会用了!)所以用了笨蛋的方法做的!程序写的很笨,大家不要笑哈!
assume cs:code , ds:data
data segment
mov ax,0020H
mov ds,ax
mov ds:[0],0123H
mov ds:[2],0456H
mov ds:[4],0789H ;这里是笨方法
mov ds:[6],0abcH
mov ds:[8],0defH
mov ds:[10],0fedH
mov ds:[12],0cbaH
mov ds:[14],0987H
data ends
code segment
mov ax,0
mov dx,0
mov bx,0
mov cx,8
s:mov dl,ds:[bx]
inc bx
mov dh,ds:[bx]
add ax,dx
mov dx,0
inc bx ;这里也是!!!
loop s
mov ax,004cH
int 21H
code ends
end
编译运行的时候,观察AX,总是发现当运行到代码段 mov ax,0的时候,直接跳过去了并没有编译!并且观察0020:0000内存单元的数据发现是C3 而不是23,而我把 (mov ax,0)放到数据段中末尾就好了,如:
assume cs:code , ds:data
data segment
mov ax,0020H
mov ds,ax
mov ds:[0],0123H
mov ds:[2],0456H
mov ds:[4],0789H
mov ds:[6],0abcH
mov ds:[8],0defH
mov ds:[10],0fedH
mov ds:[12],0cbaH
mov ds:[14],0987H
   mov ax,0
data ends
  这是为什么呀?是编程思想一开始就是错误的么?还是CPU当中有其他的规定或者什么的?希望各位高手能解开我的疑问,我刚学汇编不久希望能得到鼓励与解惑,谢谢!
...全文
117 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
柳慧妍 2007-08-24
  • 打赏
  • 举报
回复
路过
vanhanlen 2007-08-18
  • 打赏
  • 举报
回复
再补充一下 我知道那段程序漏洞百出 也有基础性的问题 可是为什么把mov ax,0放到结尾 最后编译出现的结果是对的呢?我就这个不明白!希望有人解答下!
vanhanlen 2007-08-18
  • 打赏
  • 举报
回复
刚才说的话有点欠妥 毕竟一楼提示我好好看第六章了!在此表示衷心感谢,我第六章刚看两页 。不好意思 我没看完就发问题!
vanhanlen 2007-08-18
  • 打赏
  • 举报
回复
首先 谢谢 俩位的回复! 尤其是二楼的回复 让我明白了很多,非常感谢!您这样的才是我心目中乐于助人的高手!
回一楼:正因为我不懂 我才发帖子问的么 我要懂了 我基础要好了 我还问这这些干嘛啊?我不就去解答别人的问题了么!在我眼里没有丢人的问题 ,没有低级的问题 !你说是不是!我这刚学汇编 很多还处于迷惘中 很需要大家的热心指导和帮助 殊不知 也许仅仅是您的一两句话就给了我N多的启发!
zara 2007-08-18
  • 打赏
  • 举报
回复
其实, 由于你将数据通过指令放到了 20:0 处, 所以 data 段中的是指令, 不再是数据了, 那个也不能作为数据段来处理. data 和 code 作为两个段时, 中间可能会有 gap, 被编译器填充后会导致连续运行时 code 段的代码序列出现错乱. 所以, data 和 code 两段的代码应该合并在一起, 并通过 end xx 语句指定程序从哪里开始执行. 如同:
assume cs:code , ds:data
data segment
data ends
code segment
start::
mov ax,0020H
mov ds,ax
mov ds:[0],0123H
mov ds:[2],0456H
mov ds:[4],0789H ; ;这里是笨方法
mov ds:[6],0abcH
mov ds:[8],0defH
mov ds:[10],0fedH
mov ds:[12],0cbaH
mov ds:[14],0987H
mov ax,0
mov dx,0
mov bx,0
mov cx,8
s:mov dl,ds:[bx]
inc bx
mov dh,ds:[bx]
add ax,dx
mov dx,0
inc bx ; ;这里也是!!!
loop s
mov ax,004cH
int 21H
code ends
end start

当然了, 这部分代码如你自己所说有不少可改进之处.

另外的 20:00 处数据的问题, 由于该处是 80h 中断向量, 可能会被某些程序使用到, 存放在这里未必安全, 即是自己的数据, 也可能引发其它同样使用到这里的程序的问题.
hkbyest 2007-08-18
  • 打赏
  • 举报
回复
天啊,真的有点晕...

LZ还是先多看看书吧。

记得是汇编代码结构的内容啊,你把许多东西都搞混了,这不是编程思想问题,这是基础问题!

希望你能自己找出其中的基础问题,然后我们再来讨论好吗。

(提示:你的程序没有分开数据段和代码段,如果不明白请看第6章。)

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧