Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Max00766
1 / 1 / 1
Регистрация: 20.10.2015
Сообщений: 246
1

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

15.05.2016, 19:59. Просмотров 854. Ответов 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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
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...

FASM/MASM/TASM
В ентернетах очень много различных примеров для различных ассемблеров, я решил что буду изучать...

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

Компиляторы MASM, FASM, TASM - в чем их различия
День добрый. Ребята я вот начинаю изучать язык программирования ассемблер, и и не могу понять...

1
R71MT
5309 / 1470 / 313
Регистрация: 29.07.2014
Сообщений: 2,513
Записей в блоге: 5
15.05.2016, 20:44 2
Лучший ответ Сообщение было отмечено Max00766 как решение

Решение

..попробуй в этих строках заменить MOV на LEA
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2016, 20:44

MASM, TASM, FASM: что выбрать для программирования в ядре
Какой асемлер выбрать для проганья в едре? вынь

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

Перевести код (Basic -> FASM)
нужно составить задачу во FlatAssembler. Нужно решить задачу Вычислить...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru