ASM Сравнить 2 числа

Моя задача — сравнить два числа в 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

Что я делаю неправильно? Это мой первый проект на ассемблере


person Logarytms    schedule 02.11.2015    source источник


Ответы (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

person Sep Roland    schedule 02.11.2015