Задача: Написать программу поиска максимального из 2–х целых чисел. Максимум поместить в переменную max и вывести на экран. Эти 2 числа пользователь вводит сам.
Вот что у меня получилось:
code segment
org 100h
assume cs:code, ds:code, ss:code
Start:
mov bx, 1
start2:
mov ah, 8
int 21h
test al, al
jnz NotFuncKey
int 21h
jmp Start
NotFuncKey:
sub al, '1'
jb Start
cmp bx, 1
jne kon
mov bl, al
mov bx, 2
jmp start2
kon:
cmp al, bl
jge pon
jmp vto
pon:
mov dx, offset b
jmp print
vto:
mov dx, offset a
jmp print
print:
mov ah, 9
int 21h
dec ah
mov ax, 0
jmp start
a db 'bol $'
b db 'men $'
code ends
end Start
Некоторые цифры он нормально сравнивает, а некоторые нет, в чём проблема? , измените код или дайте свой.
Другие языки программирования и технологии
Ассемблер! Нужна помощь!
А так?
code segment
org 100h
assume cs:code, ds:code, ss:code
Start:
lea dx, Prompt
mov ah, 9
int 21h
call Input
mov a, ax
inc byte ptr Prompt
lea dx, Prompt
mov ah, 9
int 21h
call Input
mov b, ax
mov max, ax
cmp a, ax
jle B_Max
mov ax, a
mov max, ax
B_Max:
lea dx, Result
mov ah, 9
int 21h
mov ax, max
call Print
xor ah, ah
int 16h
int 20h
InpError:
mov ah,9
lea dx, txtErr
int 21h
Input:
lea dx, Buff
mov ah, 10
int 21h
mov al, 13
int 29h
mov al, 10
int 29h
xor bx, bx
mov di, 10
lea si, Buff+2
xor ch, ch
mov cl, [si-1]
jcxz InpError
lodsb
cmp al, '-'
je InpNext
cmp al, '+'
jne InpLoop
InpNext:
cmp cx, 1
je InpError
jmp InpSymb
InpLoop:
sub al, '0'
jb InpError
cmp al, 9
ja InpError
cbw
xchg ax, bx
mul di
jc InpError
test ax, ax
js InpError
add bx, ax
js InpError
InpSymb:
lodsb
loop InpLoop
cmp byte ptr Buff+2, '-'
jne InpQuit
neg bx
InpQuit:
mov ax, bx
ret
Print:
cwd
xor ax, dx
sub ax, dx
test dx, dx
jz PrnPositive
mov dx, ax
mov al, '-'
int 29h
mov ax, dx
PrnPositive:
mov bx, 10
WriteInt:
push dx
cwd
div bx
test ax, ax
jz WriteEnd
call WriteInt
WriteEnd:
mov al, dl
or al, '0'
int 29h
pop dx
ret
Prompt db '1: $'
Result db 'max = $'
txtErr db 'Ошибка! '
db 'Введите целое число от -32767 до 32767: $'
Buff db 15, ?,16 dup (?)
a dw ?
b dw ?
max dw ?
code ends
end Start
code segment
org 100h
assume cs:code, ds:code, ss:code
Start:
lea dx, Prompt
mov ah, 9
int 21h
call Input
mov a, ax
inc byte ptr Prompt
lea dx, Prompt
mov ah, 9
int 21h
call Input
mov b, ax
mov max, ax
cmp a, ax
jle B_Max
mov ax, a
mov max, ax
B_Max:
lea dx, Result
mov ah, 9
int 21h
mov ax, max
call Print
xor ah, ah
int 16h
int 20h
InpError:
mov ah,9
lea dx, txtErr
int 21h
Input:
lea dx, Buff
mov ah, 10
int 21h
mov al, 13
int 29h
mov al, 10
int 29h
xor bx, bx
mov di, 10
lea si, Buff+2
xor ch, ch
mov cl, [si-1]
jcxz InpError
lodsb
cmp al, '-'
je InpNext
cmp al, '+'
jne InpLoop
InpNext:
cmp cx, 1
je InpError
jmp InpSymb
InpLoop:
sub al, '0'
jb InpError
cmp al, 9
ja InpError
cbw
xchg ax, bx
mul di
jc InpError
test ax, ax
js InpError
add bx, ax
js InpError
InpSymb:
lodsb
loop InpLoop
cmp byte ptr Buff+2, '-'
jne InpQuit
neg bx
InpQuit:
mov ax, bx
ret
Print:
cwd
xor ax, dx
sub ax, dx
test dx, dx
jz PrnPositive
mov dx, ax
mov al, '-'
int 29h
mov ax, dx
PrnPositive:
mov bx, 10
WriteInt:
push dx
cwd
div bx
test ax, ax
jz WriteEnd
call WriteInt
WriteEnd:
mov al, dl
or al, '0'
int 29h
pop dx
ret
Prompt db '1: $'
Result db 'max = $'
txtErr db 'Ошибка! '
db 'Введите целое число от -32767 до 32767: $'
Buff db 15, ?,16 dup (?)
a dw ?
b dw ?
max dw ?
code ends
end Start
Похожие вопросы
- Нужна помощь с ассемблером
- Нужна помощь с программой на ассемблере - комментирование каждой строки
- нужна помощь в изучении ассемблера
- нужна помощь. найти сумму квадратов чётных элементов на языке ассемблер используя арифметические команды
- Нужна помощь по информатике.
- Нужна помощь с паскалем!
- Программисты,нужна помощь,пожалуйста Для вас легко
- Логика. Нужна помощь.
- Нужна помощь
- Информатика!Нужна помощь!если можно,с объяснением.
Если не очень сложно, опиши каждое действие комментариями)