сложение двух чисел на ассемблере tasm 4.1
.model tiny
.code
org 256
main:
mov ax,1
mov bx,2
add ax,bx
mov ah,2
int 21h
ret
end main
Последовательность команд mov ah,2 ; int 21h выводит на экран символ, содержащийся в регистре DL (http://www.codenet.ru/progr/dos/dos_0010.php)
В вашей программе этот регистр не используется. Видимо символ "=" уже был в этом регистре до запуска программы.
Также стоит понимать, что эта команда выводит не число, а символ с заданным кодом. Чтобы получить символ-цифру нужно будет прибавить к числу код нулевого символа.
Последовательность команд 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
.code
org 256
main:
mov dl, 1
add dl, 2
add dl, '0'
mov ah,2
int 21h
ret
end main
Могу только предположить, что нельзя писать так:
mov ds,ax
.code
org 256
main:
mov dl, 1
add dl, 2
add dl, '0'
mov ah,2
int 21h
ret
end main
Могу только предположить, что нельзя писать так:
mov ds,ax
подскажите пожалуйста, что нужно сделать, (хотя бы на словах), чтобы выводились результаты сложения двух чисел таких как 8+5, чтобы результат выводился 13, а не знак =.
подскажите пожалуйста, что нужно сделать, (хотя бы на словах), чтобы выводились результаты сложения двух чисел таких как 8+5, чтобы результат выводился 13, а не знак =.
Сейчас вы уже умеете выводить одну цифру.
Нужно сначала поделить число на 10 и вывести как первую цифру,
затем взять остаток от деления на 10 и вывести как вторую цифру.
Для более длинных чисел этот алгоритм тоже можно адаптировать :)
s segment stack 'stack'
db 128 dup(?)
s ends
s segment stack 'stack'
db 128 dup(?)
s ends
объявление сегмента стека размером 128 байт .
подскажите пожалуйста, что нужно сделать, (хотя бы на словах), чтобы выводились результаты сложения двух чисел таких как 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
так правильно будет?
.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
для целых чисел есть команды преобразования в двоично-десятичный вид .
преобразуете и выводите по 4 бита , пропуская первые нули .
для целых чисел есть команды преобразования в двоично-десятичный вид .
преобразуете и выводите по 4 бита , пропуская первые нули .
командами сдвига? а как пропустить первые нули?
Подскажите пожалуйста почему при интерпретации такого программного кода в 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 ?
А как можно исправить это предупреждение, чтобы оно не появлялось?
SEGMENT имя [атрибуты]
В режиме MASM директива SEGMENT имеет следующий синтаксис:
имя SEGMENT [атрибуты]"
а у вас получается "имя SEGMENT другое имя [атрибуты]"
инерция мышления .