001fh 发表于 2017-4-19 09:55:40

关于试验九--小甲鱼老师视频教程里的错误

用图说话

001fh 发表于 2017-4-19 10:02:27

以下是本人琢磨好久弄出来的,加载入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
               

云启 发表于 2017-4-21 22:56:33

这个是没有错的.....0b872+0a=b87c是段地址,,左移一位才是偏移地址,小甲鱼老师说的很清楚

001fh 发表于 2017-4-22 08:41:21

云启 发表于 2017-4-21 22:56
这个是没有错的.....0b872+0a=b87c是段地址,,左移一位才是偏移地址,小甲鱼老师说的很清楚

那你按照这个数据加一下看看,出来的结果能不能和段地址0b872,偏移地址为0时候,同向下偏移160个字节段的结果一致?

001fh 发表于 2017-4-22 08:42:59

云启 发表于 2017-4-21 22:56
这个是没有错的.....0b872+0a=b87c是段地址,,左移一位才是偏移地址,小甲鱼老师说的很清楚

然后你再用DEBUG单步调试下看看,当执行+0a这一步后,看看偏移地址跳到哪了

云启 发表于 2017-4-22 10:57:42


并没有错正常跳转

云启 发表于 2017-4-22 11:13:49

你和小甲鱼的编程和运行过程不一样,并不代表人家是错的,结果都是一样的

云启 发表于 2017-4-22 11:35:58

你的只修一次es段寄存器,然后si索引显存地址
b8720 + si......320......


,小甲鱼老师的每次外循环都会修改段寄存器
b872 + 0ah = b87c + 0ah = b886
第一行 用 b8720+ di
第二行 用 b87c0 + di
第三行 用 b8860 + di


yongtaige 发表于 2017-4-22 11:57:43

我也认为小甲鱼老师没有错,0b872+0a 段地址 + 0a= 0b8720+a0 全地址 + a0
a0 = 160字节
跟你自己代码里 add si,160 效果是一样样儿的
页: [1]
查看完整版本: 关于试验九--小甲鱼老师视频教程里的错误