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

Ваш аккаунт

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

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

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

Вывод по координатам

48K
15 сентября 2009 года
Alyonka89
7 / / 17.08.2009
Здравствуйте! Я только начала изучать ассемблер, использую компилятор Tasm. Пыталась написать программу, которая запрашивает координаты х и у и выводит * в этих координатах. (Х должно быть [00..79], a Y [00..24]. Подскажите, пожалуйста, что нужно исправить, чтобы программа работала корректно.
Зарание благодарна.
P.S. Вообще в задании написано, что нужно запрашивать строку Xstr и Ystr используя прерывание 21h и функцию 0ah, а потом уже строки преобразовывать в числа, но как это сделать я вообще не поняла, поэтому попробывала запрашивать посимвольно.
Код:
.MODEL small
.STACK 200h
.DATA
p1 db 'Pervaja cifra(desjatok) Xstr dolzhna bytj [0..7], cifra ne prinimaetja programmoj, poka ne popadjot v nuzhnyj diapazon', '$'
p2 db 'Pervaja cifra(desjatok) Ystr dolzhna bytj [0..2], cifra ne prinimaetja programmoj, poka ne popadjot v nuzhnyj diapazon', '$'
p3 db 'Vtoraja cifra(edenichnyj razrjad) Ystr dolzhen bytj [0..4], cifra ne prinimaetja programmoj, poka ne popadjot v nuzhnyj diapazon', '$'  
pustaja db 0dh, 0ah, '$'
Zvezda db '*', '$'
.CODE
ProgramStart: mov ax, @data
              mov ds, ax
              xor di, di
              xor si, si
              mov ah, 9
              mov dx, offset p1
              int 21h
              mov ah, 9
              mov dx, offset pustaja
              int 21h              
  xstr1:      mov ah, 08h  ; запрос первой цифры числа х и преобразование в числовую форму
              int 21h
              cmp al, '0'
              jb xstr1
              cmp al, '7'
              ja xstr1
              mov ah, 02h
              mov dl, al
              int 21h
              sub al, '0'
              xor ah, ah
              mov bx, 10
              mul bx
              mov di, ax
              jmp xstr2
  xstr2:      mov ah, 08h  ; запрос второй цифры числа х и преобразование в числовую форму
              int 21h
              cmp al, '0'
              jb xstr2
              cmp al, '9'
              ja xstr2
              mov ah, 02h
              mov dl, al
              int 21h
              sub al, '0'
              xor ah, ah
              mov cx, ax
              mov ax, di
              add ax, cx
              mov di, ax
              mov ah, 9
              mov dx, offset pustaja
              int 21h
              mov ah, 9
              mov dx, offset p2
              int 21h
              mov ah, 9
              mov dx, offset pustaja
              int 21h
              mov ah, 9
              mov dx, offset p3
              int 21h
              mov ah, 9
              mov dx, offset pustaja
              int 21h
              jmp ystr1
  ystr1:      mov ah, 08h  ; запрос первой цифры числа у и преобразование в числовую форму
              int 21h
              cmp al, '0'
              jb ystr1
              cmp al, '2'
              ja ystr1
              mov ah, 02h
              mov dl, al
              int 21h
              sub al, '0'
              xor ah, ah
              mov bx, 10
              mul bx
              mov si, ax
              jmp ystr2
  Ystr2:      mov ah, 08h  ; запрос второй цифры числа у и преобразование в числовую форму
              int 21h
              cmp al, '0'
              jb xstr2
              cmp al, '4'
              ja xstr2
              mov ah, 02h
              mov dl, al
              int 21h
              sub al, '0'
              xor ah, ah
              mov cx, ax
              mov ax, si
              add ax, cx
              mov si, ax
              xor dh, dh
              xor dl, dl
              jmp clrscr
  clrscr:     mov ah, 0fh  ; очистка экрана                  
              int 10h                  
              mov ah, 00h                  
              int 10h
              mov ah, 02h
              mov dh, [si] ; y в dh
              mov dl, [di] ; x в dl
              xor bh, bh                  
              int 10h
              mov ah, 09h
              mov dx, offset Zvezda
              int 21h                    
              xor ah, ah                  
              int 16h
              mov ah, 4Ch                  
              int 21h
END ProgramStart
50K
16 сентября 2009 года
LeonidPr
9 / / 15.09.2009
Функция 0Ah прерывания 21h позволяет ввести строку с клавиатуры. В паре регистров DS : DX перед вызовом задается адрес буфера, в который будет помещена строка. Первые два байта этого буфера служебные. Первый - размер буфера, задается перед вызовом, во второй функция поместит число введенных символов.
Например.
Код:
В сегменте данных...
 BufSize   db 2
 StrLen    db ?
 StrBuf    db 2 dup(0)
В сегменте кода
 MOV DX, @data
 MOV DS, DX

 LEA  DX, BufSize
 MOV  AH, 0Ah
 INT  21h


В результате в StrLen будет число введенных символов (в вашем случае 1 или 2), а в StrBuf собственно сами коды символов цифр введенного числа. Далее вам нужно преобразовать из строкового представления числа в StrBuf в двоичное (можно подпрограммой оформить), ну а дальше уже дело техники...
48K
17 сентября 2009 года
Alyonka89
7 / / 17.08.2009
Большое спасибо за помощь
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог