红头发 发表于 2013-8-10 01:32:42

为何编译不通过?

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,8
b ends

d segment
   db 0,0,0,0,0,0,0,0
d ends

code segment

start: mov al,0
       mov bl,0
       mov dl,16
s:   add al,
           mov ,al
           inc bl
           inc dl
           loop s
          
           mov ax,4c00h
           int 21h
code ends
end start
为什么红色那行编译通不过呢?

牡丹花下死做鬼 发表于 2013-8-10 01:32:43

红头发 发表于 2013-8-10 15:02 static/image/common/back.gif
还是不行啊,我直接进debug打代码,发现可能是 和有区别,难道是只有【bx】才能代表偏移地址??
如果是ds 为段地址的话 就只能是BX
依旧申请最佳

小咒 发表于 2013-8-10 03:29:03

s:   add al, ;偏移地址只能使用16位寄存器来保存不能用8位寄存器来指定偏移地址
         mov ,alCPU内部寻址方式,16位段地址+16位偏移地址=20位物理地址
你使用了一个8位的寄存器来指定偏移地址,进行内存地址的寻址这是肯定会报错的

红头发 发表于 2013-8-10 09:36:03

本帖最后由 红头发 于 2013-8-10 09:58 编辑

小咒 发表于 2013-8-10 03:29 static/image/common/back.gif
CPU内部寻址方式,16位段地址+16位偏移地址=20位物理地址
你使用了一个8位的寄存器来指定偏移地址,进行内 ...
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,8
b ends

d segment
   db 0,0,0,0,0,0,0,0
d ends

code segment

start: mov ax,cs         mov ds,ax
         mov bx,0
         mov dx,16
s:       add al,
         mov ,al
         inc bx
         inc dx
         loop s
         
         mov ax,4c00h
         int 21h
code ends
end start
改成这样后为什么红色这句还是错的呢?

牡丹花下死做鬼 发表于 2013-8-10 10:57:08

红头发 发表于 2013-8-10 09:36 static/image/common/back.gif
assume cs:code

a segment

物理地址是 段地址:偏移地址啊
20为          16位      16位
al 是8位的啊 所以就算 mov,al dx还是相当于8位的啊
al 改成 ax试试吧
如果成功申请最佳啊

liangivws 发表于 2013-8-10 12:55:12

          mov ah,0
         add al,
         mov ,ax
         inc bx
         inc dx
         loop s

红头发 发表于 2013-8-10 15:02:05

牡丹花下死做鬼 发表于 2013-8-10 10:57 static/image/common/back.gif
物理地址是 段地址:偏移地址啊
20为          16位      16位
al 是8位的啊 所以就算 mov,al dx ...

还是不行啊,我直接进debug打代码,发现可能是 和有区别,难道是只有【bx】才能代表偏移地址??

红头发 发表于 2013-8-10 15:03:57

liangivws 发表于 2013-8-10 12:55 static/image/common/back.gif
mov ah,0
         add al,
         mov ,ax


不行啊。。。

1236 发表于 2013-8-10 15:06:17

如果是CMD窗口下可以不用bx可以直接[一个数值]   但是文本下编写 必须用bx 也就是   而你的是个啊

1236 发表于 2013-8-10 15:07:07

文本下,每个寄存器搜有特殊意义的,例如,寻址时,bx代表偏移,循环时,cx代表次数,你不要乱用哦

红头发 发表于 2013-8-10 15:10:04

1236 发表于 2013-8-10 15:07 static/image/common/back.gif
文本下,每个寄存器搜有特殊意义的,例如,寻址时,bx代表偏移,循环时,cx代表次数,你不要乱用哦

嗯,谢谢啦~

红头发 发表于 2013-8-10 15:10:54

牡丹花下死做鬼 发表于 2013-8-10 15:06 static/image/common/back.gif
如果是ds 为段地址的话 就只能是BX
依旧申请最佳

嗯,看来我前面的课还是没学好,复习复习!

红头发 发表于 2013-8-10 15:12:05

牡丹花下死做鬼 发表于 2013-8-10 15:06 static/image/common/back.gif
如果是ds 为段地址的话 就只能是BX
依旧申请最佳

嗯,看来我前面的课还是没学好,复习复习!

小咒 发表于 2013-8-10 16:38:21

红头发 发表于 2013-8-10 15:02 static/image/common/back.gif
还是不行啊,我直接进debug打代码,发现可能是 和有区别,难道是只有【bx】才能代表偏移地址??

不知道你学习到哪里了,可能还没学习到后面吧
先和你说一下

8086CPU中bx,bp,si,di只有这4个寄存器可以用在[..]中来进行内存单元的寻址
但是这4个寄存器只能以4种组合出现,
bp的默认寄存器是在ss而不是在ds,所以可以理解为bp与sp是相同的

红头发 发表于 2013-8-10 16:43:48

小咒 发表于 2013-8-10 16:38 static/image/common/back.gif
不知道你学习到哪里了,可能还没学习到后面吧
先和你说一下



嗯,还没看到后面,请问你是用几天学习完汇编的,我觉的自己的进度很慢。。

小咒 发表于 2013-8-10 16:53:45

红头发 发表于 2013-8-10 16:43 static/image/common/back.gif
嗯,还没看到后面,请问你是用几天学习完汇编的,我觉的自己的进度很慢。。

学无止尽,王爽的书还没学完我也才学习到第十章
目前学习了20天了不是每天在学的。。

红头发 发表于 2013-8-10 19:06:16

小咒 发表于 2013-8-10 16:53 static/image/common/back.gif
学无止尽,王爽的书还没学完我也才学习到第十章
目前学习了20天了不是每天在学的。。

嗯,谢谢啦~

为了家人。 发表于 2013-8-11 01:16:52

看看楼主学习
页: [1]
查看完整版本: 为何编译不通过?