【问题标题】:ASM Compare 2 NumbersASM 比较 2 个数字
【发布时间】:2015-11-02 18:05:54
【问题描述】:

我的任务是在 ASM 中比较两个数字。我输入第一个数字(二进制​​)和第二个(二进制)。我必须比较 Z1 和 Z2。如果 Z1>=Z2,则显示 TRUE,否则显示 FALSE

dane segment
txt1 db 'First number: $'
txt2 db 'Secend number: $'
z1 dw 0
z2 dw 0
prawda db 'True!$'
falsz db 'False!$'
dane ends

sts segment stack
db 256 dup(?)
sts ends

program segment
assume cs:program, ss:sts, ds:dane
start:
mov ax, seg dane
mov ds,ax 

mov dx, offset txt1
mov ah, 9
int 21h

mov cx, 16
mov bx, offset z1
petla1:
mov ah, 1
int 21h
mov [bx], al
inc bx
loop petla1

mov cx, 16
mov ax, 0
mov bx, offset z1
petla2:
shl ax, 1
mov dl, [bx]
cmp dl, 31h
jne dal1
add ax, 1
dal1:
inc bx
loop petla2

mov dx, offset txt2
mov ah, 9
int 21h

mov cx, 16
mov bx, offset z1
petla3:
mov ah, 1
int 21h
mov [bx], al
inc bx
loop petla3

mov cx, 16
mov ax, 0
mov bx, offset z1
petla4:
shl ax, 1
mov dl, [bx]
cmp dl, 31h
jne dal2
add ax, 1
dal2:
inc bx
loop petla4

;JGE, >= JNL not <
mov ax, [z1]
mov bx, [z2]
cmp ax,bx
jge ety
mov ah, 9
mov dx, offset falsz
int 21h
jae koniec

ety:
mov ah,9
mov dx, offset prawda
int 21h
koniec:

mov ah, 4ch
int 21h
program ends
end start

我做错了什么?这是我的第一个汇编项目

【问题讨论】:

    标签: numbers compare x86-16


    【解决方案1】:
    mov cx, 16
    mov bx, offset z1
    petla1:
    mov ah, 1
    int 21h
    mov [bx], al
    inc bx
    loop petla1
    

    您没有为此操作保留必要的内存! Z1 定义为一个字(2 个字节),您在此循环中写入 16 个字节。
    如果您想保留程序的基本结构,请添加 16 字节缓冲区的定义以接收数字的二进制表示。

     Buffer  db  16 dup(0)
    
     mov cx, 16
     mov bx, offset Buffer
    petla1:
     mov ah, 1
     int 21h
     mov [bx], al
     inc bx
     loop petla1
    
     mov cx, 16
     mov ax, 0
     mov bx, offset Buffer
    petla2:
     shl ax, 1
     mov dl, [bx]
     cmp dl, 31h
     jne dal1
     add ax, 1
    dal1:
     inc bx
     loop petla2
    
     mov [z1], ax
    

    使用相同的 Buffer 对第二个数字执行类似操作,但将 AX 存储在 z2 中。

    请注意jae koniec 应该是无条件跳转。 jmp koniec

    【讨论】:

      猜你喜欢
      • 2021-06-02
      • 2012-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-02
      • 2019-11-10
      • 1970-01-01
      相关资源
      最近更新 更多