Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.95/22: Рейтинг темы: голосов - 22, средняя оценка - 4.95
4 / 4 / 0
Регистрация: 24.12.2014
Сообщений: 31

Ввести два числа, одно в двоичной форме, другое в шестнадцатеричной, сравнить их и вывести результат

10.11.2019, 14:26. Показов 5458. Ответов 48
Метки нет (Все метки)

Добрый день.

Прошу помощи.
Собственно есть задание: "Ввести два числа, одно в двоичной форме, другое в шестнадцатеричной, сравнить их и вывести результат."

Есть код, который я пытался писать и понимать на протяжении 3ех дней)
Понимаю что, то что тут написано скорее всего в корне не верно, но что-то совсем сложно у меня ассемблер идет, прошу помощи или хотя-бы толчка в нужном направлении... Писал код с помощью эмулятора emu8086, поэтому все пояснения после ";" идут в английском транслите. Некоторые части кода брал из сети, в процессе изучения)
p.s 16битная система выбрана опять же по причине обучения в сети, там было сказано, что так легче)
Дошел до следующего вида -
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
use16
org 0x100
 
mov dx, privet
mov ah, 9 ; BuBog CTpoKu
int 21h   ; next geucTBue
 
mov dx, first
mov ah, 9
int 21h
 
mov cx,8 ; nogroToBka nepemeHHux
    mov dx,0 ; resultat
 
m1:
    push dx ; np94em B cTek
 
    mov ah,1 ; BBOg
    int 21h
 
    pop dx ; gocTaem
    shl dx,1 ; cgBuraeM Ha 1 bit 
 
    cmp al,'1'
        jnz m2
    or dx,1 ; if BBegeH cymbol 1 - ycTaHoBuM MJlagwuu bit
 
m2:
    loop m1 ; koHec
    
mov dl, al
int 21h
 
 
mov dx, second
mov ah, 9
int 21h
 
mov ah,1 ; BBog 1 cymbola
        int 21h
 
        cmp al, 'a' ; a - small
        jb m3
        
        cmp al, 'f'
        ja input_error
 
        sub al,'a' + 0ah
        jmp input_rezult
    
        ; 3arJlaBHa9
m3:
        cmp al, 'A' ; A - 6oJlwa9
        jb m4
        
        cmp al, 'F'
        ja input_error
 
        sub al,'A' + 0ah
        jmp input_rezult
 
m4:
        ; 4ucjla
 
        cmp al, '0' ; 0 - null
        jb input_rezult
        
        cmp al, '9'
        ja input_error
 
        sub al,'0' + 0
        jmp input_rezult
 
input_error: 
        mov al,0
input_rezult:
 
 
mov bl, al  ; noMewaeM B bl 4ucJlo 
int 21h
 
 
 
mov dx, result
mov ah, 9
int 21h
 
 
cmp bl,dl     ; cpaBHuBaem 4ucJla
jg a_bolshe_b
jl a_menshe_b
jz a_ravno_b
 
a_bolshe_b:
mov ah,09
mov dx,bolshe
int 21h
jmp exit
 
a_menshe_b:
mov ah,09
mov dx,menshe
int 21h
jmp exit
 
a_ravno_b:
mov ah,09
mov dx,ravno
int 21h
 
exit:
mov ah,08h
int 21h
 
mov ax,4c00h
int 21h
 
 
 
 
 
 
 
 
 
privet db 13,10, "Rabotu vipolnil Valdemar Zigritovich$"
bolshe  db 13,10, "a>b$"
menshe db 13,10, "a<b$"
ravno db 13,10, "a=b$"
first db 13,10, "Vvedite chislo a v dvoichnoy forme:$"
second db 13,10, "Vvedite chislo b v 16richnoi forme:$" 
result db 13,10, "Vash resulatat:$"

P.p.s. Кстати части ввода двоичного и шестнадцатеричного чисел были взяты прямиком из задания, их первоначальный вид:
Двоичное:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mov cx,8 ; подготовка переменных 
    mov dx,0 ; dx - результат
m1:
    push dx ; "спрячем" на время в стеке 
 
    mov ah,1 ; введем с клавиатуры 1 символ
    int 21h
 
    pop dx ; вернем из стека
    shl dx,1 ; сдвинем на 1 бит 
 
    cmp al,'1'
        jnz m2
    or dx,1 ; если был введен символ '1' - установим младший бит
      m2:
    loop m1 ; конец цикла
Шестнадцатеричное:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
mov ah,1 ; введем 1 символ
        int 21h
 
        cmp al, 'a' ; a - маленькая английская
        jb m1
        
        cmp al, 'f'
        ja input_error
 
        sub al,'a' + 0ah
        jmp input_rezult
    
        ; аналогично для заглавной буквы
m1:
        cmp al, 'A' ; A - большая английская
        jb m2
        
        cmp al, 'F'
        ja input_error
 
        sub al,'A' + 0ah
        jmp input_rezult
 
    m2:
        ; аналогично для цифр
 
        cmp al, '0' ; 0 - ноль
        jb input_rezult
        
        cmp al, '9'
        ja input_error
 
        sub al,'0' + 0
        jmp input_rezult
 
input_error: 
        mov al,0
input_rezult:
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.11.2019, 14:26
Ответы с готовыми решениями:

Ввести с клавиатуры два целых числа в двоичной форме и вычислить их суммы
Ввести с клавиатуры два целых числа в двоичной форме. Написать программу вычисления их суммы. помогите! заранее спасибо

Вводятся два числа в шестнадцатеричной сс. Умножить их и вывести результат на экран в десятичной сс
помогите написать программу на ассемблере: Вводятся два числа в шестнадцатеричной системе счисления. Умножить их и вывести результат на...

Вводятся два числа в десятичной системе Найти их произведение и вывести результат на экран в шестнадцатеричной
А можно наоборот из 10-ной в 16-ю у меня не получается, что-то в переводе не правильно...

48
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8668 / 4505 / 1670
Регистрация: 01.02.2015
Сообщений: 13,935
Записей в блоге: 13
10.11.2019, 23:29
Как вариант - в методичке вместе с кодом могли быть пояснения.
1
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
11.11.2019, 12:04
Цитата Сообщение от Low1keee Посмотреть сообщение
Если он возвращается в регистре ah, то я уже все перепробовал(или нет!?), исходя из этого ищу что-то другое, но ничего не приходит в голову пока.
Простите, а для кого Вы комментируете свой код?
Цитата Сообщение от Low1keee Посмотреть сообщение
mov dx,0 ; dx - результат
2
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
11.11.2019, 12:17
Лучший ответ Сообщение было отмечено ФедосеевПавел как решение

Решение

Когда Вы нажимаете кнопку эмуляции(1), у Вас открывается два окна, отладчика и исходного кода.
На первом есть две кнопки пуск(2) и одиночный шаг(3).
Последняяи используетася для отладки программы.
Четвертое окно появляется когда Вы запускаете программу кнопками 2 или 3.
Миниатюры
Ввести два числа, одно в двоичной форме, другое в шестнадцатеричной, сравнить их и вывести результат  
3
4 / 4 / 0
Регистрация: 24.12.2014
Сообщений: 31
11.11.2019, 14:33  [ТС]
Constantin Cat,
Assembler
1
mov dx,0 ; dx - результат
Это не мой код, это код который предоставлен в "задачнике", как необходимый к применению.
Про то что dx - результат, то самое нужное число, была мысль, но я не смог понять как сравнить этот регистр с al, выдавало ошибку, очевидно что я делал что-то не так, но разбираться почему так у меня уже не было времени и я решил долбиться пока в другую стенку .
Спасибо за пояснения работы отладчика emu, сегодня вечером постараюсь до него добраться и все таки завершить код.
0
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
11.11.2019, 15:50
Цитата Сообщение от Low1keee Посмотреть сообщение
Спасибо за пояснения работы отладчика emu, сегодня вечером постараюсь до него добраться и все таки завершить код.
Мне нравится Ваш оптимизм, . Но Вашему коду ещё далеко до завершения.

Цитата Сообщение от Low1keee Посмотреть сообщение
Это не мой код, это код который предоставлен в "задачнике",
Название или ссылку на него.


Цитата Сообщение от Low1keee Посмотреть сообщение
Про то что dx - результат, то самое нужное число, была мысль, но я не смог понять как сравнить этот регистр с al, выдавало ошибку,
DX = DH+DL, AX=AH+AL, надеюсь это Вам поможет.
То, что компилятор выдает ошибку: не правильная инструкция; не правильная размерность операндов, неправильные типы и т.д., это только Вам подсказка. Ваша задача, понять, что не нравится компилятору и исправить это, а не кричать "ошибка, ошибка".

Вот пример компиляции кода TASM Эмой:
(1) illegal instruction: model tiny,pascal or wrong parameters.
(23) illegal instruction: uses bx,cx,dx or wrong parameters.
(25) wrong parameters: MOV dx,a
(25) probably no zero prefix for hex; or no 'h' suffix; or wrong addressing; or undefined var: a
Все компиляторы понимают директиву MODEL- какую программу создавать и как передаются параметры в п/п-мы, только Эма круче этого.
Все компиляторы понимают директиву USES - что будут использованы такие регистры, по этому их нужно сохранить при входе и востановить при выходе из п/п-мы.
Это декомпиляция, кода TASM
(см. выше)
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
sub_10143       proc near
arg_0           = word ptr  4
arg_2           = word ptr  6
;есть входные параметры, организовывается стековый кадр
    push    bp
    mov     bp, sp
;директива uses    bx,cx,dx
    push    bx
    push    cx
    push    dx
    mov     ah, 9
    mov     dx, [bp+arg_2];читается аргумент из стека
    int     21h 
. . . 
loc_10186:
    mov     ax, bx
;директива uses    bx,cx,dx
    pop     dx
    pop     cx
    pop     bx
;удаляется стековый кадр
    pop     bp
    retn    4;п/п-ма чистит за собой стек - аргумент pascal в директиве model заставляет компилятор так написать код
sub_10143       endp
строка 25, эма не понимает, что у подрограммы могут быть параметры. И эти две ошибки её фантазии, на тему почему я не такая как все.
Качайте нормальный компилятор тут. распакуйте его в папку, да работа с ним только с помощью командной строки, но если Вы будете использовать ВАТ=-файлы, то она упростится.
У меня в рабочей папке:
21.10.2016 22:23 104 161021.bat
20.11.2018 19:37 41 181120c.bat
20.02.2019 21:25 93 190220.bat
12.03.2018 10:14 24 bc3.bat
07.06.2019 16:39 143 codeblok.bat
13.09.2019 18:44 97 delete.bat
14.04.2017 22:21 22 fasm.bat
12.09.2018 19:56 38 m1.bat
12.09.2018 19:59 38 m2.bat
16.05.2019 08:53 90 mc11.bat
20.02.2019 21:25 93 mc13.bat
16.05.2019 09:16 80 mc5.bat
03.06.2016 07:40 94 me13.bat
26.04.2017 11:27 78 mml.bat
13.09.2019 19:02 34 moove.bat
12.12.2018 14:10 165 mw8.bat
05.02.2019 15:24 68 n.bat
25.05.2019 17:01 31 n0.bat
25.05.2019 17:00 60 n0c.bat
15.11.2017 12:40 69 n210.bat
25.05.2019 16:59 60 n2c.bat
25.05.2019 16:58 60 nc.bat
27.04.2019 17:31 72 tc2.bat
20.09.2019 09:15 79 tc22.bat
20.09.2019 09:27 82 tc22l.bat
23.04.2018 11:56 76 tc2l.bat
20.02.2019 19:35 82 tc4.bat
20.09.2019 09:15 89 tc42.bat
20.09.2019 09:25 92 tc42l.bat
03.03.2016 14:58 83 tc4l.bat
26.04.2017 14:08 134 tc4m.bat
07.03.2019 13:35 31 td.bat
18.02.2019 23:13 74 te2.bat
05.02.2019 15:42 67 te3.bat
01.03.2016 10:28 75 te4.bat
07.03.2019 13:45 82 te4i.bat
03.03.2016 14:59 80 te4l.bat
05.02.2019 15:31 75 te4n.bat
04.05.2016 11:29 82 tw5.bat
05.04.2017 07:57 73 tw5h.bat
17.02.2019 18:44 29 x01.bat
41 File(s) 3я039 bytes
41 ВАТ-файл, обычно я пользуюсь tc2, te2, te2l, te4l.
Запоминается легко tc2 = tasm, com, 2-версия, иногда есть в имени "l" - включить листинг. "w"- под windows. Есть ещё "nхх"
и "mхх" -это nasm и masm.
ТС2:
D:\CAT\_Lang\Tasm\tasm.2\tasm %1
D:\CAT\_Lang\Tasm\tasm.2\tlink %1 /t
ТС2L:
D:\CAT\_Lang\Tasm\tasm.2\tasm %1,,,
D:\CAT\_Lang\Tasm\tasm.2\tlink %1,,, /t
Заметьте, вотличии от masm
D:\CAT\_Lang\Masm\Masm.613\BIN\ml %1.asm /c
D:\CAT\_Lang\Masm\Masm.613\BIN\link %1.obj
не нужно дописывать ещё и разширения файлов, с листингами отдельная история, а TASM - просто добавил запятых.


Есть ещё и delete.bat
del *.obj
del *.map
del *.xrf
del *.bak
del *.lst
del 1*.exe
del 1*.com
del *.*$*
del *.o
Он удаляет все промежуточные файлы.
1
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16374 / 7686 / 1080
Регистрация: 11.11.2010
Сообщений: 13,760
11.11.2019, 15:57
Constantin Cat,
посмотри здесь Как создать универсальный bat-файл
1
11.11.2019, 16:03

Не по теме:

Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Этот emu8086 - платная программа и поэтому у меня её нет и не будет. Поэтому советов по работе с отладчиком дать тоже не могу. Знаю только, что возможности имеются.
Похоже, это уже давно не платная, а официально музейная прогамма.
https://archive.org/details/tu... r_Emulator
На бывшем официальном сайте сейчас какие-то винтажные картриджи к GameBoy и подобной технике.

1
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
11.11.2019, 16:28
Цитата Сообщение от Mikl___ Посмотреть сообщение
посмотри здесь
Видел я эту тему, но у меня подход несколько другой D:\CAT\_my -рабочая папка и мой МакКофе её игнорирует. D:\CAT\_Lang - папка с компиляторами, с помощью ВАТ, вызываю нужный компилятор для кода.
Если заметил, я не прописывал пути в PATCH, а указываю прямые пути, т.е. если мне нужен masm 5.0 то компилировать я буду родным линекером, т.е. из пакета 5.0.
asmtools, codeblocks, delphi, i8085, java, sms - разовые версии, в остальных папках по несколько версий данного компилятора, к примеру fasm тоже несколько. О Паскале - просто молчу, там у меня все, что нашел в сети("манечка" у меня такая, есть даже переведенный на русский). А Tasm - тоже-ну очень много.
Миниатюры
Ввести два числа, одно в двоичной форме, другое в шестнадцатеричной, сравнить их и вывести результат   Ввести два числа, одно в двоичной форме, другое в шестнадцатеричной, сравнить их и вывести результат  
1
4 / 4 / 0
Регистрация: 24.12.2014
Сообщений: 31
11.11.2019, 18:35  [ТС]
Цитата Сообщение от Constantin Cat Посмотреть сообщение
Но Вашему коду ещё далеко до завершения.

Цитата Сообщение от Constantin Cat Посмотреть сообщение
Название или ссылку на него.
Я не просто так выделил слово "задачник" в кавычки) Он состоит из вариантов заданий, и 3ех дополнительных кодов, которые надо использовать.(Два из них, нужные мне, в первом посте)
Цитата Сообщение от Constantin Cat Посмотреть сообщение
DX = DH+DL, AX=AH+AL, надеюсь это Вам поможет.
То, что компилятор выдает ошибку: не правильная инструкция; не правильная размерность операндов, неправильные типы и т.д., это только Вам подсказка. Ваша задача, понять, что не нравится компилятору и исправить это, а не кричать "ошибка, ошибка".
То что DX и AX так делятся я уже узнавал, пробовал что-то делать и с dh и dl, но далеко не продвинулся. А на счет того, что мне надо понять на что ругается компилятор, это да, но для меня его ругань пока на "эльфийском"))
Цитата Сообщение от Constantin Cat Посмотреть сообщение
строка 25, эма не понимает, что у подрограммы могут быть параметры. И эти две ошибки её фантазии, на тему почему я не такая как все.
Качайте нормальный компилятор тут. распакуйте его в папку, да работа с ним только с помощью командной строки, но если Вы будете использовать ВАТ=-файлы, то она упростится.
Он будет работать на 64бит винде, скачал, но еще не разобрался как в нем работать? Сложно сейчас будеть опять с нуля разбираться в новых программах... Просто пока я искал где будет удобнее всего компилировать, наткнулся на ему, которая работает хоть как-то на WIN10 64bit.
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8668 / 4505 / 1670
Регистрация: 01.02.2015
Сообщений: 13,935
Записей в блоге: 13
11.11.2019, 18:43
Low1keee, в методичке вашего преподавателя однозначно указан компилятор. Ничего выдумывать не надо.
0
4 / 4 / 0
Регистрация: 24.12.2014
Сообщений: 31
11.11.2019, 18:55  [ТС]
ФедосеевПавел, Да ничего я не выдумываю)
Во вложении прикрепил все, что предоставил мне преподаватель)
Мой вариант Ф.
Курс лекций каюсь, даже не пытался освоить, уж очень много времени на это уйдет.
Лекции-
https://vk.com/doc46569678_521... 217137646b
Команды процессора-
https://vk.com/doc46569678_521... a345bf68e5
Вариант-
https://vk.com/doc46569678_521... 2e09962dac
1
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8668 / 4505 / 1670
Регистрация: 01.02.2015
Сообщений: 13,935
Записей в блоге: 13
11.11.2019, 18:59
Разработать программу на языке Ассемблера Intel x86 для ОС MS-DOS (допустимо для ОС UNIX). Модель памяти – не регламентируется.
Пойдёт и emu8086. Научитесь хоть чему нибудь.
1
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
11.11.2019, 19:11
Цитата Сообщение от Low1keee Посмотреть сообщение
Он будет работать на 64бит винде,
Только под DOSBOX, работа с компилятором и работа самой программы.
1
4 / 4 / 0
Регистрация: 24.12.2014
Сообщений: 31
11.11.2019, 19:22  [ТС]
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Научитесь хоть чему нибудь.
Что Вы имеете ввиду? Подскажите хотя-бы с какой стороны подойти)
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8668 / 4505 / 1670
Регистрация: 01.02.2015
Сообщений: 13,935
Записей в блоге: 13
11.11.2019, 19:38
Не знаю - не педагог и не преподаватель.
Сам учился просто - открыл книжку и читал (мои книги испещерены пометками), и всего через несколько лет проверил знания на компьютере - набрал HelloWorld. Даже Pascal в ВУЗе учил только по книгам - наша ЭВМ СМ2М была постоянно неисправна. На курсе микропроцессорной техники учили несколько МП и МК вместе с ассемблерами - по книгам, программы для них набирали и чем-то компилировали, но не проверяли на железе и в эмуляторах.

Чем вам помочь? Разобраться за вас? Очевидно - нет.

Могу дать готовый код, в довесок коду Constantin Cat.
Он будет состоять из точно такой же основной программы и двух процедур из закреплённой темы Ввод и вывод чисел в различных системах счисления
Сейчас наберу и добавлю его.
1
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
11.11.2019, 19:39
Цитата Сообщение от Low1keee Посмотреть сообщение
Что Вы имеете ввиду? Подскажите хотя-бы с какой стороны подойти)
Научить Вас мы не можем. Все зависит только от Вас. Давать Вам готовый код:
Цитата Сообщение от Low1keee Посмотреть сообщение
Брать готовый код не буду,
Но Вам никто не мешает пройти по нему с карандашиком, для понимания, что пишите Вы и как на этот вопрос смотрят те, что на один левел выше Вас.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
11.11.2019, 19:50
Если 64-битный Windows, ставите из Магазина приложений Windows Ubuntu, и получаете кучу ассемблеров, компиляторов и отладчиков на все лады. Для 64-битного линукса писать не сложнее, чем для 16-битного подобия PC/MS-DOS.
Не помню, нужно ли отдельно включать WSL ( https://docs.microsoft.com/en-us/windows/wsl/about ). Если нужно, думаю, при уставновке подскажут.
1
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
11.11.2019, 19:52
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Могу дать готовый код, в довесок коду
Не напрягайтесь, я этот код два дня "вылизывал". Там нет ничего лишнего.Ну разве, что контроль переполнения.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
model   tiny,pascal
.code
org 100h
begin:  lea ax,db1st
    call    InpNum,ax,2
    jc  begin
    mov dw1,ax
@@00:   lea ax,db2nd
    call    InpNum,ax,16
    jc  @@00
    lea dx,dbEqu
    cmp ax,dw1
    jz  @@01
    lea dx,dbBig
    ja  @@01
    lea dx,dbLow
@@01:   mov ah,9
    int 21h
    xor ax,ax
    int 16h
    ret
InpNum  proc    a:word,b:word
uses    bx,cx,dx
    mov ah,9
    mov dx,a
    int 21h
    xor bx,bx
IN1:    xor ax,ax
    int 16h
    cmp al,13
    jz  IN3
    mov ah,al
    sub ah,'0'
    cmp ah,10
    jb  IN2
    and al,11011111b
    mov ah,al
    sub ah,'7'
IN2:    mov dx,b
    cmp ah,dl
    jae IN1
    push    ax
    int 29h
    pop ax
    mov al,ah
    and ax,0Fh
    xchg    ax,bx
    mul b
    add bx,ax
    or  dx,dx
    jz  IN1
    stc
IN3:    mov ax,bx
    ret
InpNum  endp
db1st   db  10,13,'Enter bin number:$'
db2nd   db  10,13,'Enter hex number:$'
dbEqu   db  10,13,'Bin = Hex$'
dbLow   db  10,13,'Bin > Hex$'
dbBig   db  10,13,'Bin < Hex$'
dw1 dw  ?
dw2 dw  ?
end begin
Я уже добавил.
1
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8668 / 4505 / 1670
Регистрация: 01.02.2015
Сообщений: 13,935
Записей в блоге: 13
11.11.2019, 20:17
И я добавлю
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
.model medium
 
.stack 200h
 
.data
        a               db      ?
        b               db      ?
        CrLf            db      0Dh, 0Ah, '$'
        msgPressAnyKey  db      0Dh, 0Ah, 'Press any key to exit...', '$'
        msgPromptA      db      'Get A (bin): ', '$'
        msgPromptB      db      0Dh, 0Ah, 'Get B (hex): ', '$'
        msgEqual        db      0Dh, 0Ah, 'a==b', '$'
        msgBelow        db      0Dh, 0Ah, 'a<b', '$'
        msgAbove        db      0Dh, 0Ah, 'a>b', '$'
.code
 
GetBin  proc
        mov     bl,     0
        mov     cx,     8
        @@gb_for:
                mov     ah,     8
                int     21h
 
                mov     dl,     al
                sub     al,     '0'
                jb      @@gb_for
                cmp     al,     1
                ja      @@gb_for
 
                shl     bl,     1
                or      bl,     al
 
                mov     ah,     2
                int     21h
        loop    @@gb_for
        mov     al,     bl
        ret
GetBin  endp
 
GetHex  proc
        mov     bl,     0
        mov     cx,     2
        @@gh_for:
                mov     ah,     8
                int     21h
 
                mov     dl,     al
                sub     al,     '0'
                jb      @@gh_for
                cmp     al,     9
                jbe     @@show
                sub     al,     'A'-'0'-10
                jb      @@gh_for
                cmp     al,     0Fh
                jbe     @@show
                sub     al,     'a'-'A'
                jb      @@gh_for
                cmp     al,     0Fh
                ja      @@gh_for
 
        @@show:
                shl     bl,     1
                shl     bl,     1
                shl     bl,     1
                shl     bl,     1
                or      bl,     al
 
                mov     ah,     2
                int     21h
        loop    @@gh_for
        mov     al,     bl
        ret
GetHex  endp
 
main    proc
        ;инициализация сегментного регистра ds адресом сегмента данных
        mov     ax,     @data
        mov     ds,     ax
 
        mov     ah,     09h
        lea     dx,     [msgPromptA]
        int     21h
        call    GetBin
        mov     [a],    al
 
        mov     ah,     09h
        lea     dx,     [msgPromptB]
        int     21h
        call    GetHex
        mov     [b],    al
 
        mov     al,     [a]
        cmp     al,     [b]
        jb      @@below
        ja      @@above
 
        ;вывод сообщения о равенстве
        mov     ah,     09h
        lea     dx,     [msgEqual]
        int     21h
        jmp     @@exit
 
@@below:
        ;вывод сообщения "меньше"
        mov     ah,     09h
        lea     dx,     [msgBelow]
        int     21h
        jmp     @@exit
 
@@above:
        ;вывод сообщения "больше"
        mov     ah,     09h
        lea     dx,     [msgAbove]
        int     21h
        jmp     @@exit
 
@@exit:
        mov     ah,     08h
        int     21h
 
        mov     ax,     4C00h
        int     21h
 
        ;вывод результата
        mov     ah,     09h
        lea     dx,     [msgResult]
        int     21h
        ;ожидание нажатия любой клавиши
        mov     ah,     09h
        lea     dx,     [msgPressAnyKey]
        int     21h
 
        mov     ah,     00h
        int     16h
 
        ;завершение программы
        mov     ax,     4C00h
        int     21h
main    endp
 
end     main
1
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
11.11.2019, 20:41
ФедосеевПавел,
А у меня строчек меньше.

1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.11.2019, 20:41

Сравнить два числа и вывести результат сравнения
2.Написать функцию, которая сравнивает два числа и выводит результат сравнения.

Сравнить два целых числа, вывести результат
Дорогие форумчане, еще один вопрос на сегодня. Признателен Вам. Задача. Ввод двух целых чисел. Сравнение этих чисел, печать...

Ввести два одноразрядных положительных целых числа. Вывести на экран сумму ведённых чисел в двоичной системе счисления
Ввести с клавиатуры два одноразрядных положительных целых числа. Вывести на экран сумму ведённых чисел в двоичной системе счисления Очень...

Сравнить два целых числа и вывести результат сравнения в виде одного из знаков: >, < или =
Задача 10. Написать программу, содержащую функцию, которая сравнивает два целых числа и возвращает результат сравнения в виде одного из...

Даны два числа: одно размером dd, другое dw. Сложить эти числа
Дана задачка на ассемблере помогите сделать, а то совсем не шарю Даны два числа одно размером - dd, другое dw сложить эти числа


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru