Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Народ, кто шарит в assembler[e]? Please help me write two subprograms... (http://forum.oszone.net/showthread.php?t=41155)

warezhka84 16-11-2004 00:35 273171

Народ, кто шарит в assembler[e]? Please help me write two subprograms...
 
Народ, помогите пожалуйста написать пару процедурок на ассемблере (для DOS):
1) Вывести содержимое регистра AX на экран.
2) Читает с клавы число и записывает его в регистр AX.

shurikan 17-11-2004 20:26 273609

warezhka84
В какой системе счисления?:)

warezhka84 17-11-2004 20:31 273610

В десятичной (можно конечно и в шестнадцатиричной...но лучше все таки в decimal[е])

shurikan 18-11-2004 18:18 273862

ОК! В пятницу отошлю на ящик. :)

shurikan 19-11-2004 19:54 274198

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 275425

Огромное спасибо.... хотя я и сам почти догнал тут до решения :)


Время: 20:18.

Время: 20:18.
© OSzone.net 2001-