注册 登录
编程论坛 汇编论坛

8位内存地址mov到16位寄存器的问题!

cs586123 发布于 2012-02-07 20:15, 1142 次点击
程序目的是将12个内存地址的内容相加在一起,结果存在DX中.
但怎么也编译不了,不知道哪里写错了,找不出错在哪里。
assume cs:a
a segment
mov ax,2000h
mov ds,ax
mov ax,0
mov cx,12
s:mov bl,[ax]
mov bh,0
add dx,bx
inc ax
loop s
mov ax,4c00h
int 21h
a ends
end
13 回复
#2
zaixuexi2012-02-07 20:37
你写的半调子代码
#ifdef .386
    mov bl,[eax]
#else
    mov bl,[si]
#endif
#3
cs5861232012-02-07 20:47
我刚学汇编的,你那eax和si还没学到,还有你那些语句也没学到,看不懂啊
#4
zklhp2012-02-07 20:49
我觉得问题的核心是:编译器提示什么呢 你不说倒没什么 那你知道编译器的提示是嘛意思

难道你想我们再编译一下 然后找错 然后改好了 给你 是么。。。

呵呵
#5
cs5861232012-02-07 21:01
编译器提示0个编写错误,1个严重错误,有时候什么也没有,直接跳出C盘命令提示符。
你们是高手,怎么短还用得着编译吗,一看就知道错在哪了。
#6
zaixuexi2012-02-07 21:15
我相信编译器,我编译了2次,第一次她告诉我哪里错了,我改了,第2次再编就对了,就肿么简单,半分钟的事情
#7
zklhp2012-02-07 21:16
程序代码:


.model tiny
.CODE
    assume cs:a
    a segment
        mov ax,2000h
        mov ds,ax
        xor si,si
        mov dx,si
        mov cx,12
        s:
            mov bl,BYTE ptr ds:[si]
            add dx,bx
            inc si
        loop s
        mov ax,4c00h
        int 21h
    a ends
end


#8
zklhp2012-02-07 21:19
1 我只是个小菜

2 我问你为什么不贴错误提示 其实是想说 帖不贴错误其实和水平没关系 这是个态度问题

3 你带着什么态度问问题其实决定了问题回答的质量 态度决定一切
#9
cs5861232012-02-07 21:38
什么都被你想到了,真的很佩服你!
#10
king51432012-12-11 12:51
弱弱的问一句:
mov ax,0
mov cx,12
语句对吗?
8为的数,向16位的寄存器里面写,可以吗?
#11
zklhp2012-12-11 12:52
以下是引用king5143在2012-12-11 12:51:02的发言:

弱弱的问一句:
mov ax,0
mov cx,12
语句对吗?
8为的数,向16位的寄存器里面写,可以吗?
可以
#12
king51432012-12-11 16:28
那高八位是多少?
是源操作数8位扩充为16位后的数值吗?谢谢!
#13
zklhp2012-12-11 17:43
以下是引用king5143在2012-12-11 16:28:46的发言:

那高八位是多少?
是源操作数8位扩充为16位后的数值吗?谢谢!
mov ax, 1 就相当于 mov ax, 0001h 相当于编译的时候 会自动把这个立即数变成和寄存器一样大的

倒是有专门的填充寄存器高位的指令  movsx movzx 具体用法百度一下你就知道
#14
king51432012-12-12 22:44
谢谢版主!
1