warezhka84
16-11-2004, 00:35
Народ, помогите пожалуйста написать пару процедурок на ассемблере (для DOS):
1) Вывести содержимое регистра AX на экран.
2) Читает с клавы число и записывает его в регистр AX.
shurikan
17-11-2004, 20:26
warezhka84
В какой системе счисления?:)
warezhka84
17-11-2004, 20:31
В десятичной (можно конечно и в шестнадцатиричной...но лучше все таки в decimal[е])
shurikan
18-11-2004, 18:18
ОК! В пятницу отошлю на ящик. :)
shurikan
19-11-2004, 19:54
warezhka84
Ссылка на E-mail недоступна, кладу здесь.
.286
.model large
.code
inbuffer db 10,0
db 10 dup(?)
outbuffer db ' ' ;;; <- здесь не видно, но пробелов 9 штук
outtail db '$'
signed dw 0
ten dw 10
;;;
;;; Получить в AX число.
;;;
public get_in_AX
get_in_AX proc
push ax
push bp
mov bp,sp
push si
push bx
push cx
push ds
push cs
pop ds
lea dx,inbuffer
mov ah,0Ah
int 21h
xor cx,cx
mov cl,inbuffer+1
jcxz gAXerr
lea si,inbuffer+2
xor bx,bx
mov signed,bx
gAXloop:
lodsb
cmp al,'+'
je @1
cmp al,'-'
jne @2
mov signed,1
@1:
cmp si,offset inbuffer+3
jne gAXerr
@2:
cmp al,'0'
jb gAXerr
cmp al,'9'
ja gAXerr
xor ah,ah
sub ax,'0'
xchg ax,bx
mul ten
add ax,bx
js gAXerr
xchg ax,bx
loop gAXloop
jmp short gAXok
gAXerr:
stc
jmp short gAXdone
gAXok:
mov ax,signed
test ax,ax
je @3
neg bx
@3:
mov [bp+2],bx
clc
gAXdone:
pop cx
pop bx
pop si
pop ds
pop bp
pop ax
ret
get_in_AX endp
;;;
;;; Вывести число из AX на экран*.
;;;
public print_AX
print_AX proc
std
mov signed,0
test ax,8000h
je @4
mov signed,1
neg ax
@4:
push di
lea di,outtail-1
push cs
pop es
@7:
test ax,ax
je @5
xor dx,dx
div ten
xchg ax,dx
add al,'0'
stosb
xchg ax,dx
jmp short @7
@5:
cmp di,offset outtail-1
jne @6
add al,'0'
stosb
@6:
mov ax,signed
test ax,ax
jne @8
mov al,'-'
stosb
@8:
push ds
push cs
pop ds
mov dx,di
mov ah,09h
int 21h
pop ds
pop di
cld
ret
print_AX endp
end
:)
warezhka84
25-11-2004, 21:25
Огромное спасибо.... хотя я и сам почти догнал тут до решения :)
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.