|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Сложение двух двойных слов
Я написал программу на ассемблере, которая должна складывать два двойных слова. Программа запускается но ничего не отображает.
Код:
.model small ; модель памяти, используемая для ЕХЕ .stack 100h ; сегмент стека размером в 256 байт .data X dd 1111111h ;определение данных Y dd 2222222h Z dd 3333333h .code start: mov ax,@data ; сегментный адрес строки message mov ds,ax ; помещается в DS mov bx, offset x mov ax, [bx] add ax,[bx+4] mov [bx+8], ax mov ax, [bx+2] adc ax, [bx+6] mov [bx+10], ax int 09h mov ax,4C00h int 21h ; функция DOS "завершить программу" end start В чём проблема? Последний раз редактировалось Admin, 31.12.2012 в 12:06. |
#2
|
||||
|
||||
Скомпилированный файл покажи, в дебаге посмотрю...
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#3
|
|||
|
|||
Это файл с расширением OBJ?
|
#4
|
||||
|
||||
Ничего не отображает - а должно? Где вывод? И зачем инт 9, это же аппаратное прерывание всегда было.
jmp $ ; Happy End! The Cake Is A Lie. |
#5
|
|||
|
|||
Я не знаю. А что вы думаете?
|
#6
|
||||
|
||||
Мда. Мог бы и разобраться в коде, который выкладываешь. 9е прерывание дос вроде на клавиатуру направляет, вызывать его руками бесполезно, как любое другое из аппаратных (с номером меньше 16). Для вывода символа есть видеосервис биос (16 номер) и функции дос (33 номер). Подробнее в гугле. Число перед выводом надо руками превратить в строку. Алгоритмы опять же можно найти в гугле, на си/делфи запросто, а потом перевести на асм.
jmp $ ; Happy End! The Cake Is A Lie. |
#7
|
|||
|
|||
Цитата:
|
#8
|
||||
|
||||
Я намекаю не на кривые руки, а на нежелание разобраться в сабже. Даже если почему-то не нашли код перевода числа в строку, его можно запросто придумать. В этом суть программирования, а не в копипасте чужого кода. А вывод есть в одной из функций инт 21х, о чем можно узнать из любого справочника. Если в яндексе набрать "прерывания дос и биос" то первой или второй ссылкой будет нормальный справочник.
jmp $ ; Happy End! The Cake Is A Lie. |
#9
|
|||
|
|||
Я изменил код вот так:
Код:
.model small ; модель памяти, используемая для ЕХЕ .stack 100h ; сегмент стека размером в 256 байт .data X dd 1111111h ;определение данных Y dd 2222222h Z dd 3333333h .code start: mov ax,@data ; сегментный адрес строки message mov ds,ax ; помещается в DS mov bx, offset x mov ax, [bx] add ax,[bx+4] mov [bx+8], ax mov ax, [bx+2] adc ax, [bx+6] mov [bx+10], ax mov ah,09h int 21h mov ax,4C00h int 21h ; функция DOS "завершить программу" message db "53687091",0Dh,0Ah,'$' end start |
#10
|
||||
|
||||
Ты не говоришь прерыванию, что выводить. В одном из регистра (не помню в каком) должен быть адрес строки. Иначе как дос узнает, что надо вывести? А по поводу выводимого сообщения - либо это бред, вызванный неинициализированным регистром, либо ты что-то не так описал.
jmp $ ; Happy End! The Cake Is A Lie. |
#11
|
|||
|
|||
Мне нужно было отобразить результат 3333333h. В десятеричной системе счисления это 53687091.
|
#12
|
||||
|
||||
Мне вот только одно интересно, нах кому нужна программа под DOS?
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#13
|
|||
|
|||
Это мне задали в университете.
|
#14
|
||||
|
||||
Кому-кому, преподу в институте. ТС - ну а прерывание-то как узнает, что выводить надо?
jmp $ ; Happy End! The Cake Is A Lie. |
#15
|
|||
|
|||
Я вас не понимаю.
|