箪v箪 发表于 2012-4-21 17:33:20

汇编问题7.9

code segment
start:mov ax,stack
mov ss,ax
mov sp,16

mov ax,data
mov ds,ax

mov bx,0         ;定义行
mov cx,4
s:push cx
mov si,0         ;定义列
mov cx,4
s0: mov al,
and al,11011111b
mov ,al
inc si
loop s0

add bx,16
pop cx
loop s
mov ax,4c00h
int 21h
code ends
end start

这段程序中,里面这个这样写在编译的时候出错了,改成或者3就不会出错,各位有出现这个问题吗

梦想与现实 发表于 2012-4-22 08:18:57

应该不是你说的这个问题
你要注意 si 和 di 是不能够分成两个8位寄存器的,也就是说它们所传递对应的应该是al,ah,bl,bh这样的8位寄存器,就算是配合bx进行灵活寻址,也需要对应16位以上的寄存器,反之应该是ax,bx这样的16位寄存器!所以你仔细看一下 王爽汇编 179页 对于 si和di的讲解!

沉醉.. 发表于 2012-4-22 10:01:08

语法错误不能这么写

箪v箪 发表于 2012-4-23 11:53:45

书本上介绍说这样写也是可以的,但是编译错误,难道是书本写错了?

箪v箪 发表于 2012-4-23 12:04:24

    梦想与现实,我想你说错了,所谓的si,di不能拆成两个8位寄存器,是说他不能像ax,bx那样能拆成al,ah,bl,bh。。所以不能够这样写:mov al,;应该要这样写才对:mov ax,。。
    就算是配合bx进行灵活寻址,对应多少位的寄存器,应该传递的就是多少位的数据,如mov ax,就是16位数据,mov al 就是8为数据。
这是我的理解,希望大伙能讨论讨论:lol

fishc1008 发表于 2017-2-4 16:46:48

学习学习

fishc1008 发表于 2017-2-4 16:57:00

学习学习
页: [1]
查看完整版本: 汇编问题7.9