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


Автор: Katiuha 8.10.2007, 17:47
Очень срочно нужна помощь в переводе кода с IDEAL режима в  MASM.
Чтото пыталась переделать сама.. моя попытка второй соурс

И еще просьба, нужен пошаговвые коментариии к каждой строке. Спасибо.   smile 

IDEAL CODE
Код

    ideal
    model small
    stack 256
dataseg
buff    db      2 dup(0),'h.',0dh,0ah,'$'
excode    db    0
welcome db      'Vyvod skankoda.',0dh,0ah,0ah
wlcm    db      'Vyxod ESC.',0dh,0ah
        db      'Nazhat' klavishu.',0dh,0ah,'$'
codeseg
proc keywaiting         ;proverka na nazhatije klaviatury
        push    ax
        mov     ah, 1
        int     16h
        pop     ax
        ret
endp keywaiting
proc getch              ;vozvrasciajet znachenije ascii-simvola upravliajuscej ili funkcionalnoj klavishi
        xor     ah,ah                      
        int     16h
        or      al,al
        jnz     @@10
        xchg    ah,al
        add     al,32
        jmp     short @@20
@@10:
        xor     ah,ah
        cmp     al,32
        jb      @@20
        inc     ah
@@20:
        or      ah,ah
        ret
endp getch
proc hexdigit           ;preobrazujet 4-bitovoje znachenije v ascii cifru
        cmp     dl,0ah
        jb      @@10
        add     dl,37h
        ret
@@10:
        or      dl,'0'
        ret
endp hexdigit
start:
    mov    ax,@data
    mov    ds,ax
    mov    es,ax
        mov     ah,09h
        mov     dx,offset welcome
        int     21h
repeat:
        call    keywaiting
        jz      repeat
        call    getch
        push    ax
        mov     dl,al
        shr     dl,4
        call    hexdigit
        mov     dh,dl
        mov     dl,al
        and     dl,0fh
        call    hexdigit
        xchg    dh,dl
        mov     [word buff],dx
        mov     ah,09h
        mov     dx,offset buff
        int     21h
        pop     ax
        cmp     al,1bh
        je      exit
        mov     ah,09h
        mov     dx, offset wlcm
        int     21h
        jmp     repeat
exit:
        mov     ah,4ch
        mov     al,[excode]
    int    21h
end start



Моя версия:
Код

LOCALS @@
.model small
.stack 256
.data
buff    db      2 dup(0),'h.',0dh,0ah,'$'
excode    db    0
welcome db      'Vyvod skankoda.',0dh,0ah,0ah
wlcm    db      'Vyxod ESC.',0dh,0ah
        db      'Nazhat' klavishu.',0dh,0ah,'$'
.code
proc keywaiting         ;proverka na nazhatije klaviatury
        push    ax
        mov     ah, 1
        int     16h
        pop     ax
        ret
endp keywaiting
proc getch              ;vozvrasciajet znachenije ascii-simvola upravliajuscej ili funkcionalnoj klavishi
        xor     ah,ah  
        int     16h
        or      al,al
        jnz     @@10
        xchg    ah,al
        add     al,32
        jmp     short @@20
@@10:
        xor     ah,ah
        cmp     al,32
        jb      @@20
        inc     ah
@@20:
        or      ah,ah
        ret
endp getch
proc hexdigit           ;preobrazujet 4-bitovoje znachenije v ascii cifru
        cmp     dl,0ah
        jb      @@10
        add     dl,37h
        ret
@@10:
        or      dl,'0'
        ret
endp hexdigit
start:
    mov    ax,@data
    mov    ds,ax
    mov    es,ax
        mov     ah,09h
        mov     dx,offset welcome
        int     21h
repeat:
        call    keywaiting
        jz      repeat
        call    getch
        push    ax
        mov     dl,al
        shr     dl,4
        call    hexdigit
        mov     dh,dl
        mov     dl,al
        and     dl,0fh
        call    hexdigit
        xchg    dh,dl
        mov     [word buff], dx  ; tuta eror 
        mov     ah,09h
        mov     dx,offset buff
        int     21h
        pop     ax
        cmp     al,1bh
        je      exit
        mov     ah,09h
        mov     dx, offset wlcm
        int     21h
        jmp     repeat
exit:
        mov     ah,4ch
        mov     al,[excode]
    int    21h
end start



**Error** kEYSCAN.ASM(64) Need right square bracket
*Warning* kEYSCAN.ASM(64) Argument needs type override

Автор: dumb 9.10.2007, 10:22
Код
mov     word ptr [buff], dx

Автор: Katiuha 9.10.2007, 10:40
Сенкю!   smile 
Может еще найдется добрая душа которая прокоментирует пошагово конечную программу?
Нуу уужж очень нужно  smile 

Код

LOCALS @@
.model small
.stack 256
.data
buff    db      2 dup(0),'h.',0dh,0ah,'$'
excode    db    0
welcome db      'Vyvod skankoda.',0dh,0ah,0ah
wlcm    db      'Vyxod ESC.',0dh,0ah
        db      'Nazhat' klavishu.',0dh,0ah,'$'
.code
proc keywaiting         ;proverka na nazhatije klaviatury
        push    ax
        mov     ah, 1
        int     16h
        pop     ax
        ret
endp keywaiting
proc getch              ;vozvrasciajet znachenije ascii-simvola upravliajuscej ili funkcionalnoj klavishi
        xor     ah,ah  
        int     16h
        or      al,al
        jnz     @@10
        xchg    ah,al
        add     al,32
        jmp     short @@20
@@10:
        xor     ah,ah
        cmp     al,32
        jb      @@20
        inc     ah
@@20:
        or      ah,ah
        ret
endp getch
proc hexdigit           ;preobrazujet 4-bitovoje znachenije v ascii cifru
        cmp     dl,0ah
        jb      @@10
        add     dl,37h
        ret
@@10:
        or      dl,'0'
        ret
endp hexdigit
start:
    mov    ax,@data
    mov    ds,ax
    mov    es,ax
        mov     ah,09h
        mov     dx,offset welcome
        int     21h
repeat:
        call    keywaiting
        jz      repeat
        call    getch
        push    ax
        mov     dl,al
        shr     dl,4
        call    hexdigit
        mov     dh,dl
        mov     dl,al
        and     dl,0fh
        call    hexdigit
        xchg    dh,dl
        mov     word ptr [buff], dx
        mov     ah,09h
        mov     dx,offset buff
        int     21h
        pop     ax
        cmp     al,1bh
        je      exit
        mov     ah,09h
        mov     dx, offset wlcm
        int     21h
        jmp     repeat
exit:
        mov     ah,4ch
        mov     al,[excode]
    int    21h
end start

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