Loop指令:程序集8086 LOOP指令不停止(al loop)

的代码是汇编 8086,我循环使用LOOP指令。

CL变为零后,循环将永远继续,并将CX值更改为 FFFFh。
但是,如果我将CL的值更改为最大 06h,则循环将正常停止。
此外,如果我先删除LOOP AGAIN,它将正常工作。

DATA DB 01001100b
MOV AL, DATA
MOV CL, 08h
SUB BL, BL
SUB DL, DL
AGAIN:
ROL AL, 1  
JC SKIP
INC BL
LOOP AGAIN
SKIP: 
INC DL
LOOP AGAIN

我希望它在CL变为零时停止。

UPDATE1我注意到,当CL(或CX使用 16 位时)达到 1,最后一位为 0 时,第一个LOOP AGAIN不会跳起来,操作继续到SKIP部分。

5

简单的答案

    MOV  AL, 01001100b
    MOV  CX, 0008h
    SUB  BL, BL
    SUB  DL, DL
AGAIN:
    ROL  AL, 1  
    JC   SKIP
    INC  BL
    LOOP AGAIN    ; The 1st
    JMP  ENDOFLOOP
SKIP:
    INC  DL
    LOOP AGAIN    ; The 2nd
ENDOFLOOP:

8086 上的LOOP指令总是使用CX寄存器(全部)。

您的代码错过了第一个LOOP AGAIN的无条件跳转,以防循环在那里终止。这是为了避免在程序的SKIP部分中失败。

如何失败

    MOV AL, 01001100b
    MOV CL, 08h
    SUB BL, BL
    SUB DL, DL
AGAIN:
    ROL AL, 1  
    JC SKIP
    INC BL
    LOOP AGAIN    ; The 1st
SKIP: 
    INC DL
    LOOP AGAIN    ; The 2nd

这是代码所做的(假设CH=0):

         ROL AL, 1                         LOOP
AL=01001100b   AL=10011000b   CF=0  BL=1   CX=7  The 1st jumps back
AL=10011000b   AL=00110001b   CF=1  DL=1   CX=6  The 2nd jumps back
AL=00110001b   AL=01100010b   CF=0  BL=2   CX=5  The 1st jumps back
AL=01100010b   AL=11000100b   CF=0  BL=3   CX=4  The 1st jumps back
AL=11000100b   AL=10001001b   CF=1  DL=2   CX=3  The 2nd jumps back
AL=10001001b   AL=00010011b   CF=1  DL=3   CX=2  The 2nd jumps back
AL=00010011b   AL=00100110b   CF=0  BL=4   CX=1  The 1st jumps back
AL=00100110b   AL=01001100b   CF=0  BL=5   CX=0  The 1st FALLS THROUGH!!!

此时,由于CX变为 0,因此第 1 个LOOP AGAIN最终将不再跳回。代码通过并错误地递增DL寄存器。第 2 个LOOP AGAIN也从CX产生CX=65535
因此,该程序不会持续很长时间

为什么它似乎与修改工作

但是如果我将 CL 的值更改为最大 06h,则循环将正确停止

这就是代码对CX=6的作用:

         ROL AL, 1                         LOOP
AL=01001100b   AL=10011000b   CF=0  BL=1   CX=5  The 1st jumps back
AL=10011000b   AL=00110001b   CF=1  DL=1   CX=4  The 2nd jumps back
AL=00110001b   AL=01100010b   CF=0  BL=2   CX=3  The 1st jumps back
AL=01100010b   AL=11000100b   CF=0  BL=3   CX=2  The 1st jumps back
AL=11000100b   AL=10001001b   CF=1  DL=2   CX=1  The 2nd jumps back
AL=10001001b   AL=00010011b   CF=1  DL=3   CX=0  The 2nd FALLS THROUGH!!!

因为它是第二个LOOP AGAIN,所以没有问题,因为我们在程序的底部。

如果我将数据的最后一位更改为 1,它将使 JC 跳过,一切都很好

这就是代码对AL=01001101b的作用:

         ROL AL, 1                         LOOP
AL=01001101b   AL=10011010b   CF=0  BL=1   CX=7  The 1st jumps back
AL=10011010b   AL=00110101b   CF=1  DL=1   CX=6  The 2nd jumps back
AL=00110101b   AL=01101010b   CF=0  BL=2   CX=5  The 1st jumps back
AL=01101010b   AL=11010100b   CF=0  BL=3   CX=4  The 1st jumps back
AL=11010100b   AL=10101001b   CF=1  DL=2   CX=3  The 2nd jumps back
AL=10101001b   AL=01010011b   CF=1  DL=3   CX=2  The 2nd jumps back
AL=01010011b   AL=10100110b   CF=0  BL=4   CX=1  The 1st jumps back
AL=10100110b   AL=01001101b   CF=1  DL=4   CX=0  The 2nd FALLS THROUGH!!!

因为它是第二个LOOP AGAIN,所以没有问题,因为我们在程序的底部。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(952)
Subsequent:BeautifulSoupgetText从

之间 不拿起后续段落

下一篇

相关推荐

  • No p poo:POO和接口(在C#中)(ooppoo)

    关于No p poo的问题,在ooppoo中经常遇到,我需要了解接口:…

    2022-11-23 08:49:42
    0 33 17
  • 图文源码:[图文并茂](api для чайников)

    关于图文源码的问题,在api для чайников中经常遇到,请注意.API 就范范范范 · 诺顿顿跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳跳。…

    2024-02-06 03:32:00
    0 49 49
  • S df a:df["]和df[["]] 有什么区别(d.f.)

    关于S df a的问题,在d.f.中经常遇到,我已经写了一个函数来显示肘部以选择 Kmeans 的 K 的最佳值。…

    2024-01-18 08:44:46
    0 80 70
  • Iqp g:/\ s/g和/\ s+ /g之间有区别吗(w/s/g meaning)

    关于Iqp g的问题,在w/s/g meaning中经常遇到,当我们有一个包含空格字符的字符串时:…

    2024-01-11 05:57:39
    0 34 24
  • 本地服务器建站:使dnsmasqNOT服务器成为本地服务器

    关于本地服务器建站的问题,在dnsmask中经常遇到,有没有办法配置dnsmasq,以便它仅服务来自远程系统的 DNS 请求?…

    2024-01-15 03:17:39
    0 61 64
  • 黎巴嫩国家代码:时区日期在贝鲁特黎巴嫩(lebanese date)

    关于黎巴嫩国家代码的问题,在lebanese date中经常遇到,我在 ios 中有一个来自日期选择器的日期,我得到日期和时间,我将其转换为字符串并保存在 localStorage 中。然后,我得到这个字符串日期并将其转换为 NSDate 并在我的通知中使用它。但我的问题是通知没有运行,因为转换后日期会更改。…

    2024-03-01 11:45:05
    0 82 81
  • 迁坟有哪些程序:学习Flask有哪些好的网络应用程序

    关于迁坟有哪些程序的问题,在learn flask中经常遇到,我正在寻找具有用户注册,登录,会话,oauth 和 SQLAlchemy 的应用程序源代码,用于学习 Flask。我已经查看了 flask.pocoo.org 网站的源代码,以及 Github 上的一些 repos。我相信还有更多。欣赏任何指针。谢谢…

    2024-02-05 03:17:37
    0 29 26
  • Latex语法:Latex alignat语法

    关于Latex语法的问题,在latex alignat中经常遇到,为了在 Latex 中对齐几个方程式,我编写了这样的代码:…

    2024-03-31 01:30:08
    0 87 91

发表评论

登录 后才能评论

评论列表(38条)