小小沐 发表于 2022-3-13 17:42:20

loop指令


书上104页的5.3程序可不可以写成下面这个样子,直接用dx不借助其他寄存器

assume cs:code
code segment

        mov ax,0ffffh
        mov ds,ax
        mov dl,
        mov dh,0
        mov cx,2
       
        s:
        add dx,dx
        loop s
       
        mov ax,4c00h
        int 21h

ends code
end

jackz007 发表于 2022-3-13 17:56:38

dx = byte ptr * 4 应该是可以的。

小小沐 发表于 2022-3-13 17:59:36

jackz007 发表于 2022-3-13 17:56
dx = byte ptr * 4 应该是可以的。

俺没看懂,这本书我只看到了 P105 这个地方,大佬可以再解释一下嘛,嘿嘿嘿……

jackz007 发表于 2022-3-13 18:52:46

小小沐 发表于 2022-3-13 17:59
俺没看懂,这本书我只看到了 P105 这个地方,大佬可以再解释一下嘛,嘿嘿嘿……

      mov ax,0ffffh
      mov ds,ax      ; ds = 0ffffh
      mov dl,       ; dl = byte ptr ds:,就是把位于内存 ffff:0006 的一个字节赋值到 dl
      mov dh,0         ; dh = 0
      mov cx,2         ; 准备循环 2 次
      
      s:               ; 循环入口
      add dx,dx      ; dx = dx + dx,也就是 dx = dx * 2
      loop s         ; 循环 2 次
                         ; 最后 dx = byte ptr ffff: * 4

小小沐 发表于 2022-3-13 19:15:05

jackz007 发表于 2022-3-13 18:52


dl = byte ptr ds:这个解释有点高级俺没看懂,汇编代码我懂,但是我执行的时候出错了(执行的代码就是最初我发的那个)

jackz007 发表于 2022-3-13 19:40:49

小小沐 发表于 2022-3-13 19:15
dl = byte ptr ds:这个解释有点高级俺没看懂,汇编代码我懂,但是我执行的时候出错了(执行的代 ...

dl = byte ptr ds:
    这一句的意思是从内存 ds: 处提取一个字节,然后,赋值给 dl 寄存器。由于数据段寄存器的值是0ffffh,所以,ds: 指的就是 ffff:0006。

小小沐 发表于 2022-3-13 20:03:29

jackz007 发表于 2022-3-13 19:40
这一句的意思是从内存 ds: 处提取一个字节,然后,赋值给 dl 寄存器。由于数据段寄存器的 ...

哦哦哦,好哒!这个俺懂了,但是不明白为什么会出错
"Expected: instruction or directive
Byte symbol space free"错误中大概出现了这些词眼,我去查了一些资料,但是没看懂!还是麻烦大神指点一下,哈哈哈哈……

jackz007 发表于 2022-3-13 21:37:55

小小沐 发表于 2022-3-13 20:03
哦哦哦,好哒!这个俺懂了,但是不明白为什么会出错
"Expected: instruction or directive
Byte symbol ...

assume cs:code
code segment

start:mov ax,0ffffh
      mov ds,ax
      mov dl,
      mov dh,0
      mov cx,2
      
      s:
      add dx,dx
      loop s
      
      mov ax,4c00h
      int 21h

code ends      ; 这一行写错了
end start

小小沐 发表于 2022-3-13 22:17:33

jackz007 发表于 2022-3-13 21:37


原来如此!我好哈!
太感谢你了!谢谢!{:5_109:}
页: [1]
查看完整版本: loop指令