Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > Помогите!) Работа с буфером


Автор: XoMYAK 19.12.2013, 23:27
Всем привет! Я в программировании и, в частности, в программировании на языке Ассемблер новичок. Буквально пару недель! ребята, мне очень сложно в короткие сроки ухватывать суть. Так что прошу вашей помощи.
Задача следующая: Скласти і реалізувати програму введення та виведення цілого числа зі знаком та виведення рядка символів.
Поскольку предыдущее задание было написать процедуру ввода и преобразования целого числа (из ASCII в понятные символы путем прибавления 48(39h)) то и эту пробовал реализовать подобным путем.
Вот код:
Код

sseg segment para stack "stack"
db 255 dup ("stack")
sseg ends

dseg segment para public "data"
;buf db 255 
buf dw 100 dup ('$')
ten dw 10
dseg ends

cseg segment para public "code"
assume ss:sseg, ds:dseg, cs:cseg
main proc far

mov ax, dseg
mov ds, ax

mov ah, 0ah
lea dx, buf
int 21h

xor ax, ax

mov ax, buf+1 ; если вместо buf+1 поставить число до 32759 - то все работает

;если следующие 3 строки закомментировать можно поместить число до 65535 
; (ну, и 0ah 21 прерывания тоже надо закомментировать)
sign:
neg ax 
js sign

mov cx, 1

convert:
cmp ax, 10
jb next

xor dx, dx
inc cx
div ten

mov bx, dx
add bx, 30h
push bx
;xor ah, ah
jmp convert

next:
mov bx, ax
add bx, 30h
push bx


mov dx, 0ah
mov ah, 02h
int 21h

monitor:
pop bx
mov dx, bx
mov ah, 02h
int 21h
loop monitor

mov ah, 04ch
int 21h

main endp
cseg ends
end main

беда в том) что я не понимаю, как работать с буфером! + я знаю, что ввод числа можно и по другому реализовать( как в учебниках написано), но что то я не могу толком их примеры разобрать. А объяснить не кому(
+ я написал (подглядел) такую вот процедуру:
Код



data segment
     string db 100 dup ('$')
data ends
 
code segment
assume cs:code,ds:data
start:
    mov ax, data
    mov ds, ax
    
    mov ah,0ah
    lea dx,string
    int 21h 
    
    mov string+1,0ah
    
    mov ah,9
    lea dx,string+1
    int 21h
    
    mov ah, 10h
    int 16h
 
    mov ax, 4c00h
    int 21h
code ends
end start

но опять таки, не знаю как тут реализовать проверку знака. в общем я запутался(
Выручайте.

Автор: XoMYAK 20.12.2013, 10:34
Да, надо сделать уточнения:
1.Работаю в ТАSМ.
2.Система исчислеия- десятичная.
3.Я могу задавать вопросы, которые вам могут показаться глупыми smile 
4.Возможно вам придеться мне что то объяснять "как для дебила  smile " smile 

Автор: ФедосеевПавел 20.12.2013, 18:43
Глянь http://forum.sources.ru/index.php?showtopic=260801.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)