Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
2 / 2 / 1
Регистрация: 20.10.2015
Сообщений: 244

Перевести код из Fasm на Tasm

15.05.2016, 19:59. Показов 2448. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть код на Fasm'e, я его почти перенес на Tasm, но выдает еще несколько ошибок
Код на Fasm'e:
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
;== FASM code =======================
org 100h
jmp start
 
mes0   db  13,10,'Chislo(1):  $'
mes1   db  13,10,'Chislo(2):  $'
mes2   db  13,10,'   Rezult:  $'
buff   db  12 dup('0')        ; место под число
dig2   db  0                  ;   ..и под множитель
 
start:
      mov   dx,mes0           ;
      call  message           ;
      xor   bx,bx             ; счётчик разрядов числа
      mov   cx,10             ; макс.кол-во разрядов
@@1:  xor   ax,ax             ; ввод без эхо
      int   16h               ;
      cmp   al,13             ; Enter заканчивает ввод
      je    @@2               ;
      cmp   al,'0'            ; ингорируем всё,
      jb    @@1               ;      ..кроме чисел 0-9
      cmp   al,'9'            ;
      ja    @@1               ;
      int   29h               ; выводим ASCII-код числа на экран
      push  ax                ; сохраняем его в стеке
      inc   bx                ; считаем разряды
      loop  @@1               ; на повтор..
 
@@2:  mov   cx,bx             ; делаем СХ счётчиком для LOOP
      mov   di,buff+11        ; DI - приёмник. Прыгаем в конец буфера
      std                     ; ставим обратный шаг (DF=1)
save: pop   ax                ; снимаем числа в обратном порядке
      stosb                   ;  ..и сохраняем их в буфере справа-налево
      loop  save              ; мотаем цикл СХ-раз..
 
; Имеем: строку из 12-ти чисел в буфере,
; Левая часть буфера у нас забита нулями.
;-------------------------------------------------------------
      mov   dx,mes1           ; вводим множитель..
      call  message           ;
@@3:  mov   ah,8              ; ..без эхо
      int   21h               ;
      cmp   al,'0'            ; ингорируем всё,
      jb    @@3               ;      ..кроме чисел 0-9
      cmp   al,'9'            ;
      ja    @@3               ;
      int   29h               ; выводим символ на консоль
      and   al,0fh            ; переведём его в число
      mov   [dig2],al         ;      ..и запомним
 
; ASCII-умножение.
; Нужны операции: MUL/ADD/AAM/PUSH
; Множитель в ВL, перенос будем сохранять в BH
;-------------------------------------------------------------
      mov   dx,mes2           ;
      call  message           ;
      std                     ; обратный шаг
      mov   cx,12             ; цикл (учитывая возможный перенос)
      mov   si,buff+11        ; источник: крайний-правый символ
      xor   bx,bx             ; сбрасываем перенос
      mov   bl,[dig2]         ; множитель
mix:  lodsb                   ; берём байт из SI (si=si-1)
      and   ax,0fh            ; переводим символ в цифру
      xor   dx,dx             ;     (взводим флаги)
      mul   bl                ; перемножить байты
      aam                     ; ASCII коррекция. AL=число, AH=перенос
      add   al,bh             ; сложить число с переносом
      cmp   al,9              ; BCD-коррекция
      jbe   @@4               ; ^
      sub   al,0Ah            ; ^
      inc   ah                ; ^
@@4:  push  ax                ; запомним результат
      mov   bh,ah             ;     ..и перенос
      loop  mix               ; на повтор..
 
; В стеке получили результат.
; Выводим его на экран ---------------------------------------
      mov   cx,12             ;
prn:  pop   ax                ;
      or    al,30h            ; переводим число в символ
      int   29h               ; выводим его на консоль
      loop  prn               ;
;-------------------------------------------------------------
exit:                         ;
      xor   ax,ax             ;
      int   16h               ;
      int   20h               ;
 
;ннннннннннннннннн П Р О Ц Е Д У Р Ы нннннннннннннннннннннннннннннннннннн
;------------------------------------------------------------------------
message:                      ;
      mov   ah,9              ; вывод строки на экран
      int   21h               ;
ret                           ;
То что я перевел на Tasm, выдает ошибки в 14, 32, 41, 57, 61 Operand types do not much:
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
;== TASM code =======================
.model small 
.stack 256 
 
 .data 
mes0   db  13,10,'Chislo(1):  $'
mes1   db  13,10,'Chislo(2):  $'
mes2   db  13,10,'   Rezult:  $'
buff   db  12 dup('0')        ; место под число
dig2   db  0                  ;   ..и под множитель
 
 .code 
start:
      mov   dx,mes0           ;
      call  message           ;
      xor   bx,bx             ; счётчик разрядов числа
      mov   cx,10             ; макс.кол-во разрядов
@@1:  xor   ax,ax             ; ввод без эхо
      int   16h               ;
      cmp   al,13             ; Enter заканчивает ввод
      je    @@2               ;
      cmp   al,'0'            ; ингорируем всё,
      jb    @@1               ;      ..кроме чисел 0-9
      cmp   al,'9'            ;
      ja    @@1               ;
      int   29h               ; выводим ASCII-код числа на экран
      push  ax                ; сохраняем его в стеке
      inc   bx                ; считаем разряды
      loop  @@1               ; на повтор..
 
@@2:  mov   cx,bx             ; делаем СХ счётчиком для LOOP
      mov   di,buff+11        ; DI - приёмник. Прыгаем в конец буфера
      std                     ; ставим обратный шаг (DF=1)
save: pop   ax                ; снимаем числа в обратном порядке
      stosb                   ;  ..и сохраняем их в буфере справа-налево
      loop  save              ; мотаем цикл СХ-раз..
 
; Имеем: строку из 12-ти чисел в буфере,
; Левая часть буфера у нас забита нулями.
;-------------------------------------------------------------
      mov   dx,mes1           ; вводим множитель..
      call  message           ;
@@3:  mov   ah,8              ; ..без эхо
      int   21h               ;
      cmp   al,'0'            ; ингорируем всё,
      jb    @@3               ;      ..кроме чисел 0-9
      cmp   al,'9'            ;
      ja    @@3               ;
      int   29h               ; выводим символ на консоль
      and   al,0fh            ; переведём его в число
      mov   [dig2],al         ;      ..и запомним
 
; ASCII-умножение.
; Нужны операции: MUL/ADD/AAM/PUSH
; Множитель в ВL, перенос будем сохранять в BH
;-------------------------------------------------------------
      mov   dx,mes2           ;
      call  message           ;
      std                     ; обратный шаг
      mov   cx,12             ; цикл (учитывая возможный перенос)
      mov   si,buff+11        ; источник: крайний-правый символ
      xor   bx,bx             ; сбрасываем перенос
      mov   bl,[dig2]         ; множитель
mix:  lodsb                   ; берём байт из SI (si=si-1)
      and   ax,0fh            ; переводим символ в цифру
      xor   dx,dx             ;     (взводим флаги)
      mul   bl                ; перемножить байты
      aam                     ; ASCII коррекция. AL=число, AH=перенос
      add   al,bh             ; сложить число с переносом
      cmp   al,9              ; BCD-коррекция
      jbe   @@4               ; ^
      sub   al,0Ah            ; ^
      inc   ah                ; ^
@@4:  push  ax                ; запомним результат
      mov   bh,ah             ;     ..и перенос
      loop  mix               ; на повтор..
 
; В стеке получили результат.
; Выводим его на экран ---------------------------------------
      mov   cx,12             ;
prn:  pop   ax                ;
      or    al,30h            ; переводим число в символ
      int   29h               ; выводим его на консоль
      loop  prn               ;
;-------------------------------------------------------------
exit:                         ;
      xor   ax,ax             ;
      int   16h               ;
      int   20h               ;
 
;ннннннннннннннннн П Р О Ц Е Д У Р Ы нннннннннннннннннннннннннннннннннннн
;------------------------------------------------------------------------
message:                      ;
      mov   ah,9              ; вывод строки на экран
      int   21h               ;
ret                           ;
 mov ax, 4ch
  int 21h ; выходим
end start
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.05.2016, 19:59
Ответы с готовыми решениями:

Перевести код из FASM в TASM
Нужно переобразовать код из fasm в tasm org *100h jmp *start * fName * db *'*.*',0 * * * * * * *; маска для поиска файлов ...

Tasm в Fasm (перевести)
name prog .model small .stack 100h .data stroka db "hevtsov.dima.genad'evich", '$' .code start: mov ax,@data ...

Алгоритм RC4 (перевести FASM -> TASM)
Дали задание реализовать алгоритм rc4 на ассемблере. Не очень хорошо понимаю его. На просторах интернета нашла реализованную функцию...

1
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6206 / 2441 / 402
Регистрация: 29.07.2014
Сообщений: 3,174
Записей в блоге: 4
15.05.2016, 20:44
Лучший ответ Сообщение было отмечено Max00766 как решение

Решение

..попробуй в этих строках заменить MOV на LEA
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.05.2016, 20:44
Помогаю со студенческими работами здесь

Вычислить (1-sin0.1)+(1+sin0.2)+...+(1+sin2)
нужно составить задачу во FlatAssembler. Нужно решить задачу Вычислить (1-sin0.1)+(1+sin0.2)+...+(1+sin2). Срочно) Буду очень...

Перевести ассемблерный код TASM в программный код для архитектуры ARM
Необходимо программный код перевести в программный код языка ассемблер для архитектуры ARM, учитывая синтаксис, структуру программы и...

Какие базовые операции мне надо проделать чтобы переписать небольшой код например MASM для использования в FASM?
В ентернетах очень много различных примеров для различных ассемблеров, я решил что буду изучать FASM, но часто встречаю решения моих задач...

Перенести программу из tasm в fasm x64
Уважаемые программисты!!! прошу помочь переделать простую прогу из tasm в fasm x64!!! буду благодарен за любую помощь!!!

Использование GDI+ в ASM - TASM - FASM
Здравствуйте, я столкнулся с такой проблемой что пришло время делать первую курсовую работу в своей жизни на ассемблере и тема которая мне...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru