Сейчас на форуме: asfa, Rio (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Помогите с программой. Ассемблер
Посл.ответ Сообщение

Ранг: 0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 27 июля 2013 22:51
· Личное сообщение · #1

После прочтения Дневники чайника. Чтива 0, виток0 решил написать программку, которая выводит алфавит))) а то сообщение автора ж заманило "Ну, а если юнга напишет свою программу, которая будет выводить на экран весь алфавит и его не будет заранее в данных (то есть он будет формироваться по ходу программы), тогда я завтра же произведу его в матросы ;). "

Так вот код:

mov bx,133h
mov d,[bx],44434241h
mov dx,bx
mov ah,9h
int 021
mov ah,10h
int 016
mov d,[bx],48474645h;
mov ah,9h
int 021
mov d,[bx],52515049h
mov ah,9h
int 021
mov ah,10h
int 016
int 020

add [bx][si],al
add [bx][si],al
al,0


Программа должна делать следующее:
- выводит изначально ABCD
- делается пауза до тех пор, пока не будет нажата какая либо клавиша
- при нажатии на клавишу, выводит EFGHIYQR
- делается пауза до тех пор, пока не будет нажата какая либо клавиша
- при нажатии на клавишу, программа завершает работу
Все пазы работают, код корректный, ну а вот либо кодировка либо что то... При выводе выводит иероглифы одни. Как исправить?




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 27 июля 2013 23:03
· Личное сообщение · #2

Для вывода 9й функцией 21го прерывания строка должна заканчиваться символом доллара $

lea dx,msg
mov d,[dx],'DCBA'
mov ah,9h
int 21h

...


msg db 4 dup(0), '$'

-----
127.0.0.1, sweet 127.0.0.1




Ранг: 0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 27 июля 2013 23:15
· Личное сообщение · #3

OKOB, я пишу под ms dos пока, первый день ассм вижу в глаза. Про функции lea, msg ничего не знаю, и в примере обошлось без них. Может есть другой способ поставить $? Вот сам пример с которого я переписывал:

00000000: BB3301 mov bx,00133 ;" 3"
00000003: 66C70701020304 mov d,[bx],004030201 ;" "
0000000A: 66810730303030 add d,[bx],030303030 ;"0000"
00000011: 8BD3 mov dx,bx
00000013: B409 mov ah,009 ;" "
00000015: CD21 int 021
00000017: B410 mov ah,010 ;" "
00000019: CD16 int 016
0000001B: 66C70750505050 mov d,[bx],050505050 ;"PPPP"
00000022: 66812F1B1A1918 sub d,[bx],018191A1B ;" "
00000029: B409 mov ah,009 ;" "
0000002B: CD21 int 021
0000002D: B410 mov ah,010 ;" "
0000002F: CD16 int 016
00000031: CD20 int 020
00000033: 0000 add [bx][si],al
00000035: 0000 add [bx][si],al
00000037: 24 and al,000

как видно, здесь ничего подобного нет. Я в свое программе попробовал сам при записи в регистр строки дописать $, вышло что то ввиде

mov d,[bx],43424124h - программа запустилась, иероглифов нет, но теперь вообще ничего не выводит.




Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 27 июля 2013 23:19
· Личное сообщение · #4

Загрузи себе DOS Functions Reference pdf.
Там все функции описаны подробно.
--> http://www.eecs.wsu.edu/~ee314/handouts/dosref.pdf <--

-----
Give me a HANDLE and I will move the Earth.




Ранг: 0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 27 июля 2013 23:29
· Личное сообщение · #5

plutos, там написано, что для 9й ф-ции строки завершаются доллором, что и выше написал ОКОВ. Но как это сделать? В примере нет ничего подобного.




Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 27 июля 2013 23:34 · Поправил: plutos
· Личное сообщение · #6

;this is your DATA section:
mystring db 'Hello there','$'


;this is your CODE section:
mov ah,09 ;function number
mov dx, seg mystring ;address of string
mov ds, dx
mov dx, offset mystring
int 21h ;transfer control to DOS!

-----
Give me a HANDLE and I will move the Earth.





Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 27 июля 2013 23:37
· Личное сообщение · #7

В камнях от интел обратный порядок хранения байт, ты поставил доллар первым символом строки, потому и ничего не вывелось.
сделай mov d,[bx],24434241h - получишь ABC

вот это и есть, то что я предлагал
00000033: 0000 add [bx][si],al
00000035: 0000 add [bx][si],al
00000037: 24 and al,000

db 4 dup(0), '$'

четыре нуля начиная с адреса 133 и символ доллара по адресу 137.

-----
127.0.0.1, sweet 127.0.0.1


| Сообщение посчитали полезным: xtemps

Ранг: 0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 27 июля 2013 23:44
· Личное сообщение · #8

OKOB, спасибо, все заработало. Теперь я матрос


 eXeL@B —› Вопросы новичков —› Помогите с программой. Ассемблер
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати