关于试验九--小甲鱼老师视频教程里的错误
用图说话 以下是本人琢磨好久弄出来的,加载入DEBUG后,不要单步调试,直接用G命令跳到“MOV AX,4C00H”处,即可看到效果assume cs:code,ds:data,ss:stack
data segment
db 'welcome to masm!'
db 02h,24h,71h
data ends
stack segment
dw 8 dup (0)
stack ends
code segment
start: mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov bx,0
mov si,0
mov di,0
mov ax,0b872h
mov es,ax
mov cx,3
s: push cx
push si
push di
xor bx,bx
mov cx,16
s1: mov al,
mov es:,al
mov dl,ds:
mov es:,dl
inc bx
add si,2
loop s1
pop di
inc di
pop si
add si,160
pop cx
loop s
mov ax,4c00h
int 21h
code ends
end start
这个是没有错的.....0b872+0a=b87c是段地址,,左移一位才是偏移地址,小甲鱼老师说的很清楚 云启 发表于 2017-4-21 22:56
这个是没有错的.....0b872+0a=b87c是段地址,,左移一位才是偏移地址,小甲鱼老师说的很清楚
那你按照这个数据加一下看看,出来的结果能不能和段地址0b872,偏移地址为0时候,同向下偏移160个字节段的结果一致? 云启 发表于 2017-4-21 22:56
这个是没有错的.....0b872+0a=b87c是段地址,,左移一位才是偏移地址,小甲鱼老师说的很清楚
然后你再用DEBUG单步调试下看看,当执行+0a这一步后,看看偏移地址跳到哪了
并没有错正常跳转 你和小甲鱼的编程和运行过程不一样,并不代表人家是错的,结果都是一样的 你的只修一次es段寄存器,然后si索引显存地址
b8720 + si......320......
,小甲鱼老师的每次外循环都会修改段寄存器
b872 + 0ah = b87c + 0ah = b886
第一行 用 b8720+ di
第二行 用 b87c0 + di
第三行 用 b8860 + di
我也认为小甲鱼老师没有错,0b872+0a 段地址 + 0a= 0b8720+a0 全地址 + a0
a0 = 160字节
跟你自己代码里 add si,160 效果是一样样儿的
页:
[1]