Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: 6310
Последний выпуск: 19.06.2015

сложение двух чисел на ассемблере tasm 4.1

2.0K
01 февраля 2013 года
alexandrv
38 / / 21.01.2010
Подскажите ошибку в программе, вместо ответа выводит знак =
.model tiny
.code
org 256
main:
mov ax,1
mov bx,2
add ax,bx
mov ah,2
int 21h
ret
end main
359
01 февраля 2013 года
P*t*
474 / / 15.02.2007
А как вообще вы эту программу писали?
Последовательность команд mov ah,2 ; int 21h выводит на экран символ, содержащийся в регистре DL (http://www.codenet.ru/progr/dos/dos_0010.php)
В вашей программе этот регистр не используется. Видимо символ "=" уже был в этом регистре до запуска программы.
Также стоит понимать, что эта команда выводит не число, а символ с заданным кодом. Чтобы получить символ-цифру нужно будет прибавить к числу код нулевого символа.
2.0K
01 февраля 2013 года
alexandrv
38 / / 21.01.2010
Цитата: P*t*
А как вообще вы эту программу писали?
Последовательность команд mov ah,2 ; int 21h выводит на экран символ, содержащийся в регистре DL (http://www.codenet.ru/progr/dos/dos_0010.php)
В вашей программе этот регистр не используется. Видимо символ "=" уже был в этом регистре до запуска программы.
Также стоит понимать, что эта команда выводит не число, а символ с заданным кодом. Чтобы получить символ-цифру нужно будет прибавить к числу код нулевого символа.


Исправил программу: Выводит ошибку Fatal: Cannot generate COM file: segment-relocatable items present. Почему ?

assume ds:m2,cs:m3

m2 segment
a db 1
b db 2
m2 ends

m3 segment
main:
mov ax,m2
mov ds,ax
mov dl,a
add dl,b
add dl,'0'
mov ah,2
int 21h
m3 ends
end main

359
01 февраля 2013 года
P*t*
474 / / 15.02.2007
Вот такое должно работать:

Код:
.model tiny
.code
org 256
main:
mov dl, 1
add dl, 2
add dl, '0'
mov ah,2
int 21h
ret
end main
А с тем, как там в COM файле сегменты хранятся мне лень разбираться.
Могу только предположить, что нельзя писать так:
 
Код:
mov ax,m2
mov ds,ax
Потому что m2 - это смещение в файле, а ds - абсолютное смещение в памяти, делёное на 16. Попробуйте вообще убрать эти две строки.
2.0K
07 февраля 2013 года
alexandrv
38 / / 21.01.2010
Цитата: P*t*
Вот такое должно работать:

Код:
.model tiny
.code
org 256
main:
mov dl, 1
add dl, 2
add dl, '0'
mov ah,2
int 21h
ret
end main
А с тем, как там в COM файле сегменты хранятся мне лень разбираться.
Могу только предположить, что нельзя писать так:
 
Код:
mov ax,m2
mov ds,ax
Потому что m2 - это смещение в файле, а ds - абсолютное смещение в памяти, делёное на 16. Попробуйте вообще убрать эти две строки.



подскажите пожалуйста, что нужно сделать, (хотя бы на словах), чтобы выводились результаты сложения двух чисел таких как 8+5, чтобы результат выводился 13, а не знак =.

359
08 февраля 2013 года
P*t*
474 / / 15.02.2007
Цитата: alexandrv

подскажите пожалуйста, что нужно сделать, (хотя бы на словах), чтобы выводились результаты сложения двух чисел таких как 8+5, чтобы результат выводился 13, а не знак =.



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

Для более длинных чисел этот алгоритм тоже можно адаптировать :)

2.0K
15 марта 2013 года
alexandrv
38 / / 21.01.2010
Подскажите пожалуйста что обозначает программный код
s segment stack 'stack'
db 128 dup(?)
s ends
252
15 марта 2013 года
koderAlex
1.4K / / 07.09.2005
Цитата: alexandrv
Подскажите пожалуйста что обозначает программный код
s segment stack 'stack'
db 128 dup(?)
s ends


объявление сегмента стека размером 128 байт .

2.0K
15 марта 2013 года
alexandrv
38 / / 21.01.2010
Цитата: P*t*
Цитата: alexandrv

подскажите пожалуйста, что нужно сделать, (хотя бы на словах), чтобы выводились результаты сложения двух чисел таких как 8+5, чтобы результат выводился 13, а не знак =.



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

Для более длинных чисел этот алгоритм тоже можно адаптировать :)


.model tiny
.code
org 256
main:
mov ax,7
add ax,6
div 10
mov dl,al
mov dh,ah
add dl, '0'
mov ah,2
int 21h
mov dl,dh
add dl, '0'
mov ah,2
int 21h
ret
end main

так правильно будет?

2.0K
15 марта 2013 года
alexandrv
38 / / 21.01.2010
Разобрался сам))) Вот так вот работает и выдает 13. А для более длинных чисел адаптировать алгоритм с помощью цикла?
.model tiny
.code
org 256
main:
mov ax,7
add ax,6
mov bl,10
div bl
mov dl,al
mov dh,ah
add dl, '0'
mov ah,2
int 21h
mov dl,dh
add dl, '0'
int 21h
ret
end main
252
18 марта 2013 года
koderAlex
1.4K / / 07.09.2005
нет . но вашему горю можно помочь .
для целых чисел есть команды преобразования в двоично-десятичный вид .
преобразуете и выводите по 4 бита , пропуская первые нули .
2.0K
07 апреля 2013 года
alexandrv
38 / / 21.01.2010
Цитата: koderAlex
нет . но вашему горю можно помочь .
для целых чисел есть команды преобразования в двоично-десятичный вид .
преобразуете и выводите по 4 бита , пропуская первые нули .



командами сдвига? а как пропустить первые нули?

326
08 апреля 2013 года
sadovoya
757 / / 19.11.2005
Есть путь легче для вывода инфы из асма -- использовать сишные ф-ции (printf). Если требуется именно на низком уровне, то другое дело..
2.0K
11 апреля 2013 года
alexandrv
38 / / 21.01.2010
Цитата: sadovoya
Есть путь легче для вывода инфы из асма -- использовать сишные ф-ции (printf). Если требуется именно на низком уровне, то другое дело..



Подскажите пожалуйста почему при интерпретации такого программного кода в tasm 4.1
...
st segment stack 'stack'
db 128 dup(?)
st ends
assume cs:code, ds:data, ss:st
...
выдается предупреждение Warning Reserved word used as sumbol ST ?

252
11 апреля 2013 года
koderAlex
1.4K / / 07.09.2005
перевожу : предупреждение - зарезервированное слово используется в символе ST .
2.0K
11 апреля 2013 года
alexandrv
38 / / 21.01.2010
Цитата: koderAlex
перевожу : предупреждение - зарезервированное слово используется в символе ST .


А как можно исправить это предупреждение, чтобы оно не появлялось?

252
11 апреля 2013 года
koderAlex
1.4K / / 07.09.2005
"В режиме Ideal директива SEGMENT имеет следующий синтаксис:
SEGMENT имя [атрибуты]
В режиме MASM директива SEGMENT имеет следующий синтаксис:
имя SEGMENT [атрибуты]"
а у вас получается "имя SEGMENT другое имя [атрибуты]"
7
12 апреля 2013 года
@pixo $oft
3.4K / / 20.09.2006
Неужели настолько сложно вспомнить, что ST — это указатель стека сопроцессора? От koderAlex не ожидал такого ☺
252
12 апреля 2013 года
koderAlex
1.4K / / 07.09.2005
сложно . особенно если занят другой задачей , с отличным от 485+ процессором , где нет и не будет сопра . )
инерция мышления .

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог