微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

汇编语言:JE/JNE 作为 if-else

如何解决汇编语言:JE/JNE 作为 if-else

所以我尝试使用 name: pulumi-preview-up on: [push] env: ARM_SUBSCRIPTION_ID: ${{ secrets.ARM_SUBSCRIPTION_ID }} ARM_CLIENT_ID: ${{ secrets.ARM_CLIENT_ID }} ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }} ARM_TENANT_ID: ${{ secrets.ARM_TENANT_ID }} PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }} jobs: preview-up-destroy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: In order to use the Pulumi v2 action,we need to setup the Pulumi project specific language environment uses: actions/setup-node@v2 with: node-version: '14' - name: After setting up the Pulumi project specific language environment,we need to install the dependencies also run: npm install - name: Install Pulumi CLI uses: pulumi/action-install-pulumi-cli@v1.0.1 - uses: pulumi/actions@v2 with: command: preview stack-name: dev /JE 来执行 if-else 语句。问题是,它没有跳到我想要它去的地方。

在这里要做的是使用 JNE 指令和仅 comparejump 命令将 2 个用户输入的数字相乘。

我正在考虑做一个 if-else 样式,但我无法继续,因为它无法跳转到其他标签

这是我的代码

ADD

所以如果 num1 == 1,那就没问题了。

但是当 num1 == 2 或更多时,它不会跳转equals2,而是继续。

这是示例输出

.model small
.stack
.data
    str1 db "Enter first number: ","$" 
    
    str2 db 13,10,"Enter second number: ","$"
    
    str3 db 13,"The product of "
    num1 db ?," & "
    num2 db ?," is "
    prod db ?,"$" 
    
.code
    mov ax,@data
    mov ds,ax

    mov ah,9
    lea dx,str1
    int 21h
    
    mov ah,1
    int 21h ; takes user input for num1
    mov num1,al ; stores user input to variable input

    mov ah,str2
    int 21h
    
    mov ah,1
    int 21h ; takes user input for num2
    mov num2,al ; stores user input to variable input
    
    cmp num1,1 ; compare num1 to 1
    jne equals2 ; jump to equals2 if num1 != 1,otherwise,it will just continue
        mov al,num2
        mov prod,al
        
        mov ah,9
        lea dx,str3
        int 21h
        jmp endCode

equals2:        
        mov al,num2
        ADD al,al
        mov prod,al
        sub prod,49 ; convert hex to decimal
        
        mov ah,str3
        int 21h

endCode:
    mov ah,4ch
    int 21h

    mov ah,4ch
    int 21h
END

预期输出

Enter first number: 2
Enter second number: 4
The product of 2 & 4 is 4

顺便说一句,用户输入必须是从 1 到 9。

解决方法

当按下 0 ... 9 键时,DOS.GetCharacter 函数 01h 将返回 48 ... 57(ASCII)范围内的值。

通常情况下,您只需减去 48 即可将这些 ASCII 代码转换为预期值。但是,此特定程序无需该步骤即可。
您可以直接与 ASCII 值进行比较。是引语将让一切变得不同!

    mov al,num2
    cmp num1,'1'   <<< See the quotes 
    je  printCode
    add al,al
    sub al,48      <<< Removing the duplicated bias
printcode:
    mov prod,al
    lea dx,str3
    mov ah,09h
    int 21h
endCode:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。