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

Направете го по подобен начин за второто число, като използвате същия Буфер, но съхранявате AX в z2.

Моля, обърнете внимание, че jae koniec трябва да бъде безусловен скок. jmp koniec

person Sep Roland    schedule 02.11.2015