Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2009, 16:46   #1
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию ввод с клавиатуры

программа для определения принадлежности точки к 3 четверти
Код:
.model tiny
.code
org 100h
start:
	mov ax,-2	;занести координату х
	mov bx,-1	;занести координату у
	cmp ax,0	;сравнить с 0
	jle xx	;если меньше или равно перейти хх
	
	;в противном случае вывести no
	mov ah,9	;функция вывод строки
	mov dx,offset no	;помещение в dx смещения метки no
	int 21h
	ret	;возврат в DOS
xx:
	cmp bx,0	;сравнить с 0
	jle yy	;если меньше или равно перейти на yy
	
	;в противном случае вывести no
	mov ah,9	;функция вывод строки	
	mov dx,offset no ;помещение в dx смещения метки no
	int 21h
	ret	;возврат в DOS
	
yy:
	mov ah,9	;функция вывод строки
	mov dx,offset yes	;помещение в dx смещения метки yes		
	int 21h	
	ret	;возврат в DOS
		
no:
	db "No",0dh,0ah,'$'
	
yes: 
	db "Yes",0dh,0ah,'$'	
end start
Как сделать так чтобы пользователь мог вводить значение координат x,y?
Единственное, что ограничивает полет мысли программиста-компилятор

Последний раз редактировалось Stilet; 11.10.2015 в 16:46.
Sparky вне форума Ответить с цитированием
Старый 08.09.2009, 17:58   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Код:
Функция DOS 0Ah — Считать строку символов из STDIN в буфер

Ввод: АН = 0Ah
DS:DX = адрес буфера 
Вывод: Буфер содержит введенную строку 

Функция DOS 01h — Считать символ из STDIN с эхом, ожиданием и проверкой на Ctrl-Break

Ввод: АН = 01h 
Вывод: AL = ASCII-код символа или 0. Если AL = 0, второй вызов этой функции возвратит в AL расширенный ASCII-код символа 

Функция DOS 08h — Считать символ из STDIN без эха, с ожиданием и проверкой на Ctrl-Break

Ввод: АН = 08h 
Вывод: AL = код символа 


Функция DOS 07h — Считать символ из STDIN без эха, с ожиданием и без проверки на Ctrl-Break

Ввод: АН = 07h 
Вывод: AL = код символа 


Функция DOS 06h — Считать символ из STDIN без эха, без ожидания и без проверки на Ctrl-Break

Ввод: АН = 07h
DL = 0FFh 
Вывод: ZF = 1, если не была нажата клавиша, и AL = 00
ZF = 0, если клавиша была нажата. В этом случае AL = код символа
введенные символы надо будет переводить в число

пример процедуры ввода числа

Код:
; ввод символов
input PROC

 mov dx,offset zapros
 mov ah,9
 int 21h

 
nextnum:
	
  
    mov ah,01h	;вводим новый символ
    int 21h

    cmp al,2fh  ; если нажали enter то это конец числа 
    jl outp
    cmp al,30h  ; если введен неверный символ <0
    jl er
    cmp al,39h  ; если введен неверный символ >9
    ja er
   
    sub al,30h  ;делаем из введенного символа число
    xor ah,ah
    xchg ax,bx
    mov dx,0Ah  
    mul dx	; умножаем на основание системы счисления = 10
    
    add bx,ax	;и прибавляем новое = сумма
    jmp nextnum

er:
   
    mov dx,offset caret        ; caret   db  0Ah,0Dh,'$'
    mov ah,9
    int 21h
 
    mov dx,offset error        ; error   db  'Symbol not correct!$'
    mov ah,9
    int 21h

    mov dx,offset caret
    mov ah,9
    int 21h

    jmp nextnum

outp:
   
    ret
ENDP

Последний раз редактировалось counter; 08.09.2009 в 19:22.
counter вне форума Ответить с цитированием
Старый 08.09.2009, 18:07   #3
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Процедурка для ввода строки
Код:
maxb  db 128            ; макс. размер буфера ввода
sizeb db 0                ; число введенных символов в буфере
buf   db 128 dup(?)

procnl proc far
      push dx
      push ax
      mov  ah,2
      mov  dl,13        ; CR (курсор на начало строки)
      int  21h
      mov  dl,10        ; LF (курсор на следующую строку)
      int  21h
      pop  ax
      pop  dx
      ret
procnl endp

readbuf proc near
      push ax
      push dx
      push ds
      mov  dx,cs
      mov  ds,dx
      lea  dx,buf-2     ; ds:dx - адрес buf[-2]
      mov  ah,0Ah       ; ввод строки в буфер (включая Enter)
      int  21h
      call procnl       ; курсор на новую строку экрана
      inc  cs:sizeb     ; в длине учесть Enter
      pop  ds
      pop  dx
      pop  ax
      ret
readbuf endp
Росли вроде умными, выросли дурнями... (c)А.Васильев

Последний раз редактировалось Greblin; 08.09.2009 в 18:09.
Greblin вне форума Ответить с цитированием
Старый 08.09.2009, 18:43   #4
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Что-то все процедурки выкладывают, ну и я выложу
Процедура ввода числа, в т.ч. и отрицательного
Код:
input:
	mov ah,0ah
	mov dx,offset buff
	int 21h		; вводим строку символов
	mov dl,0ah
	mov ah,02	; переход на сл. строку экрана
	
	int 21h
	mov si,offset buff+2
	xor di,di
	cmp byte ptr [si],"-" ; если первый знак минус
	jnz polozh
	inc di	; то устанавливаем флаг
	inc si
polozh:
	xor ax,ax
	mov bx,10
@@:
	mov cl,[si]	; берем введеный символ
	cmp cl,0dh	; если это последний символ (знак перевода строки)
	jz endin		; то заканчиваем
	cmp cl,30h  ; если введен неверный символ <0
    jl er
    cmp cl,39h  ; если введен неверный символ >9
    ja er			;выдаем ошибку
	sub cl,30h	;делаем число
	mul bx		; умножаем на основание системы счисления
	add ax,cx	; добавляем к остальным
	inc si
	jmp @b		; повторяем

er:
	mov dx, offset error
	mov ah,09
	int 21h		; вывод сообщения об ошибке
	int 20h		;выход из программы

endin:
	
	dec di		; если установлен флаг
	jnz @f
	neg ax			; делаем число отрицательным
@@:
; в ax полученное число
	ret

error db "incorrect number$"
buff	db 5,6 Dup(?)
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 10.09.2009, 14:43   #5
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

спасибо всем

но воспользовалась книгой Зубкова в итоге получилось:
Код:
.model tiny
.code
org 100h
start:
;	получение с клавы координаты x
	mov dx, offset message1	;помещение в dx смещения метки message2
	mov ah,9	;функция ввыода сторки
	int 21h
	
	mov dx,offset buffer1	
	mov ah,0ah	;функция считывания строки в buffer1
	int 21h
	
	mov dx,offset clr1
	mov ah,9
	int 21h	;перевод строки
	
	
	xor di,di	;di номер байта в буфере
	xor ax,ax	;ax текущее значение результата
	mov cl,blength1
	xor ch,ch
	xor bx,bx
	mov si,cx	;si длина буфера
	mov cl,10
asc2hex:
	mov bl,byte ptr bcon1[di] 
	sub bl,'0'
	mul cx
	add ax,bx
	
	inc di
	cmp di,si
		
	jb asc2hex
	mov x,ax

; получение с клавы коордиаты y
	mov dx, offset message2	;помещение в dx смещения метки message2
	mov ah,9	;функция ввыода сторки
	int 21h
	
	mov dx,offset buffer1	
	mov ah,0ah	;функция считывания строки в buffer
	int 21h
	
	mov dx,offset clr1
	mov ah,9
	int 21h	;перевод строки
	
	
	xor di,di	;di номер байта в буфере
	xor ax,ax	;ax текущее значение результата
	mov cl,blength1
	xor ch,ch
	xor bx,bx
	mov si,cx	;si длина буфера
	mov cl,10
asc2hex2:
	mov bl,byte ptr bcon1[di] 
	sub bl,'0'
	mul cx
	add ax,bx
	
	inc di
	cmp di,si
		
	jb asc2hex2
	mov y,ax
	
; вычисление результата
			
	mov ax,x ;занести координату х
	mov bx,y	;занести координату у

	cmp ax,0	;сравнить с 0
	jle xx	;если меньше или равно перейти хх
	
	;в противном случае вывести no
	mov dx,offset no	;помещение в dx смещения метки no
	mov ah,9	;функция вывод строки
	int 21h
	ret	;возврат в DOS
xx:
	cmp bx,0	;сравнить с 0
	jle yy	;если меньше или равно перейти на yy
	
	;в противном случае вывести no	
	mov dx,offset no ;помещение в dx смещения метки no
	mov ah,9	;функция вывод строки
	int 21h
	ret	;возврат в DOS
	
yy:
	mov ah,9	;функция вывод строки
	mov dx,offset yes	;помещение в dx смещения метки yes		
	int 21h	
	ret	;возврат в DOS
		
no:
	db "No",0dh,0ah,'$'
	
yes: 
	db "Yes",0dh,0ah,'$'
	
message1:
	db "Ввведите координату x",0dh,0ah,'$'
	
message2:
	db "Введите координату y",0dh,0ah,'$'

	buffer1 db 6	;максимальная размер буфера ввода
	clr1 db  0dh,0ah,'$'
	blength1 db ? ;размер буфера после считывания	

	buffer2 db 6	;максимальная размер буфера ввода
	blength2 db ?	;размер буфера после считывания
	clr2 db 0dh,0ah,'$'
		
	x dw ?
	y dw ?

bcon1:

end start
Вот только работает она не корректно. Когда значения задавались не с клавиатуре при значениях -2 1 выдавался no. Теперь выдается yes. С кем это может быть связано?
Единственное, что ограничивает полет мысли программиста-компилятор

Последний раз редактировалось Stilet; 11.10.2015 в 16:47.
Sparky вне форума Ответить с цитированием
Старый 10.09.2009, 17:05   #6
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Это может быть связано с тем, что такой ввод не обрабатывает отрицательные числа.
А кроме того, вы считываете в один буффер
Код:
mov dx,offset buffer1 
mov ah,0ah ;функция считывания строки в buffer1
int 21h
а строку обрабатываете из другого, причем какого-то левого.
Код:
asc2hex2:
mov bl,byte ptr bcon1[di] 
sub bl,'0'
mul cx
add ax,bx
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 10.09.2009 в 17:11.
Goodwin98 вне форума Ответить с цитированием
Старый 15.03.2020, 14:34   #7
diicorp95
Новичок
Джуниор
 
Регистрация: 29.02.2020
Сообщений: 1
Смех Offtop

Оффтоп
Цитата:
Единственное, что ограничивает полет мысли программиста-компилятор
плохого программиста*
diicorp95 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с текстом в Java, ввод с клавиатуры. Pti44ka Помощь студентам 3 05.09.2009 17:10
Ввод размерности масива с клавиатуры 111111 Общие вопросы C/C++ 3 29.12.2008 08:54
Ввод чисел с клавиатуры SAVIK Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 19 26.05.2008 12:54
ввод данных с клавиатуры juden Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 07.05.2008 18:05