实验四:【bx】和loop的使用
编程,向内存0:200~0:23F依次传送数据0~63(3FH)我的答案:
assume cs:code
code segment
mov ax, 0020h
mov ds, ax
mov ax, 0
mov bx, 0
mov cx, 64
s: mov , al
inc ax
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
但是测试下来:
assume cs:code
code segment
mov ax, 0020h
mov ds, ax
mov ax, 0
mov bx, 0
mov cx, 64
s: mov , ax
inc ax
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
连个结果一样,实在费解?
s: mov , al
与
s: mov, ax
为什么一样?????? al是ax的低8位,0-63没有大于8位,所以用AL和用AX是一样的,如果你把0-63改成300-363那结果就不一样了 本帖最后由 吉吉国王 于 2019-1-12 15:03 编辑
谢谢
还有个疑问?
mov , ax
与
mov , al
这种操作 对应的类型也不同吧?
第一种是以字为单位操作?
第二种是以字节为单位操作? 吉吉国王 发表于 2019-1-12 14:59
谢谢
还有个疑问?
你的理解是对的。 mov , ax
mov , al
当然是不同的,得到的结果当然是不同的,为什么你的得到的结果相同,
秘密就在于 inc bx 这里 ,相当于下一次的低8位刚好覆盖了上一次的高8位,
巧又巧在,0-63 的数据都是在低8位中,即AL中。
按理说 mov , ax , 后面肯定是 inc bx , inc bx , 两个
也就是说,你利用了编写程序的BUG,实现了你的功能。
页:
[1]