Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Asembler] POMOCY zamiana z dziesiętna na hex i oct


Rekomendowane odpowiedzi

Opublikowano

Witam mam napisać program ktory zamieni liczbe dziesiętna na hex i oct w TASM

Napisać program, który wyświetla liczbę całkowitą, bez znaku znajdującą się w rejestrze ax w postaci:

1. szesnastkowej, przy czym liczba poprzedzona jest prefiksem 0x

2. oktalnej, przy czym liczba poprzedzona jest prefiksem \0

 

Udało mi sie zrobic zamiana ze dziesietnego na ósemkowy ale tylko do 256

 

ProgCom SEGMENT

ASSUME cs:ProgCom, ds:ProgCom, ss:ProgCom

org 0100h

start :

mov ah,0Eh

mov al,16

mov bl,al

shr al,4 ;przesuwa bit w prawo o 4

 

cmp al,10 ;porownuje do 10

 

jg ja1 ;jesli wieksza przeskocz do ja

 

 

add al,48 ;dodaje

jmp lol ;skok bezwarunkowy

ja1: ;tu leci skok warunkowy

add al,55 ;dodaje

lol: ;tu leci skok bezwarunkowy

int 10h

 

 

mov bl,al

 

AND al,0Fh

cmp al,10 ;porownuje do 10

jg ja2 ;jesli wieksza przeskocz do ja

 

 

add al,48 ;dodaje

jmp lol2 ;skok bezwarunkowy

ja2: ;tu leci skok warunkowy

add al,55 ;dodaje

lol2: ;tu leci skok bezwarunkowy

int 10h

 

mov ah,4Ch

int 021h

 

ProgCom ENDS

END start

 

//*************************z dziesietnego na hex *************************************************

 

 

ProgCom SEGMENT

ASSUME cs:ProgCom, ds:ProgCom, ss:ProgCom

org 0100h

start :

mov ah,0Eh

mov al,16

mov bl,al

shr al,4 ;przesuwa bit w prawo o 4

 

cmp al,10 ;porownuje do 10

 

jg ja1 ;jesli wieksza przeskocz do ja

 

 

add al,48 ;dodaje

jmp lol ;skok bezwarunkowy

ja1: ;tu leci skok warunkowy

add al,55 ;dodaje

lol: ;tu leci skok bezwarunkowy

int 10h

 

 

mov al,bl

 

AND al,0Fh

cmp al,10 ;porownuje do 10

jg ja2 ;jesli wieksza przeskocz do ja

 

 

add al,48 ;dodaje

jmp lol2 ;skok bezwarunkowy

ja2: ;tu leci skok warunkowy

add al,55 ;dodaje

lol2: ;tu leci skok bezwarunkowy

int 10h

 

mov ah,4Ch

int 021h

 

ProgCom ENDS

END start

Opublikowano

ProgCom SEGMENT

ASSUME cs:ProgCom, ds:ProgCom, ss:ProgCom

org 0100h

start :

 

mov cx,0

mov ah,0Eh

;**********1 bit*****************

 

mov ax,7064

 

 

mov al,ah

AND al,0F0h

shr al,4

cmp al,10 ;porownuje do 10

jg ja4 ;jesli wieksza przeskocz do ja

 

 

add al,48 ;dodaje

jmp lol4 ;skok bezwarunkowy

ja4: ;tu leci skok warunkowy

add al,55 ;dodaje

lol4: ;tu leci skok bezwarunkowy

 

mov ah,0Eh

int 10h

 

;******************2 bit **************

mov ax,7064

 

AND ah,0Fh

mov al,ah

cmp al,10 ;porownuje do 10

jg ja2 ;jesli wieksza przeskocz do ja

 

 

add al,48 ;dodaje

jmp lol2 ;skok bezwarunkowy

ja2: ;tu leci skok warunkowy

add al,55 ;dodaje

lol2: ;tu leci skok bezwarunkowy

 

mov ah,0Eh

int 10h

;**********3 bit*****************

mov ax,7064

;shr ax,12

;przesuwa bit w prawo o 4

AND al,0F0h

shr al,4

cmp al,10 ;porownuje do 10

 

jg ja1 ;jesli wieksza przeskocz do ja

 

 

add al,48 ;dodaje

jmp lol ;skok bezwarunkowy

ja1: ;tu leci skok warunkowy

add al,55 ;dodaje

lol: ;tu leci skok bezwarunkowy

 

mov ah,0Eh

int 10h

;***********************ost 4 bit*******************

mov ax,7064

 

AND al,0Fh

cmp al,10 ;porownuje do 10

 

jg ja3 ;jesli wieksza przeskocz do ja

 

 

add al,48 ;dodaje

jmp lol3 ;skok bezwarunkowy

ja3: ;tu leci skok warunkowy

add al,55 ;dodaje

lol3: ;tu leci skok bezwarunkowy

 

mov ah,0Eh

int 10h

 

 

mov ah,4Ch

int 021h

 

 

ProgCom ENDS

END start

 

 

 

 

 

 

Jakby ktos potrzebowal zamiana liczby 16bitowej na hex

Opublikowano

A teraz gotowy program !!!

 

 

ProgCom SEGMENT

ASSUME cs:ProgCom, ds:ProgCom, ss:ProgCom

org 0100h

start :

mov ax,20

mov si,ax

call oct

call hex

mov cl,0

 

mov ah,4Ch

int 021h

 

oct:

mov ah,0Eh

mov al,92

int 10h

mov al,48

int 10h

;*************************1 bit*********************************

mov al,ah

shr al,7

add al,48 ;dodaje

mov ah,0Eh

cmp al,48

je skok1; jezeli al = 0 to nie drukuje

add cl,1; dodaje do cl 1

int 10h

;***************************2 bit**************************************

skok1:

mov ax,si

mov al,ah

shr al,4

AND al,07h

add al,48 ;dodaje

mov ah,0Eh

cmp cl,48 ;jezeli cl jest wieksze od 0 to drukuje

jg druk

cmp al,48

je skok2

druk:

int 10h

add cl,1

; ***********************3 bit ********************************************

skok2:

mov ax,si

mov al,ah

shr al,1

AND al,07h

add al,48 ;dodaje

mov ah,0Eh

cmp cl,48

jg druk1

cmp al,48

je skok3

druk1:

add cl,1

int 10h

;**************************4 bit*********************************************

skok3:

mov ax,si

shr ax,6

AND al,07h

add al,48 ;dodaje

mov ah,0Eh

 

cmp cl,48

jg druk2

cmp al,48

je skok4

druk2:

int 10h

add cl,1

;**************************5 bit*********************************************

skok4:

mov ax,si

shr ax,3

AND al,07h

add al,48 ;dodaje

mov ah,0Eh

cmp cl,48

jg druk3

cmp al,48

je skok5

druk3:

int 10h

add cl,1

;**************************6 bit*********************************************

skok5: mov ax,si

AND al,07h

add al,48 ;dodaje

mov ah,0Eh

int 10h

 

ret

 

hex:

mov ah,0Eh

;**********1 bit*****************

mov al,10

int 10h

mov al,48

int 10h

mov al,120

int 10h

mov ax,si

 

 

mov al,ah

AND al,0F0h

shr al,4

cmp al,10 ;porownuje do 10

jg lit ;jesli wieksza przeskocz do ja

 

 

add al,48 ;dodaje

jmp licz ;skok bezwarunkowy

lit: ;tu leci skok warunkowy

add al,55 ;dodaje

licz: ;tu leci skok bezwarunkowy

 

mov ah,0Eh

int 10h

 

;******************2 bit **************

mov ax,si

 

AND ah,0Fh

mov al,ah

cmp al,10 ;porownuje do 10

jg lit1 ;jesli wieksza przeskocz do ja

 

 

add al,48 ;dodaje

jmp licz1 ;skok bezwarunkowy

lit1: ;tu leci skok warunkowy

add al,55 ;dodaje

licz1: ;tu leci skok bezwarunkowy

 

mov ah,0Eh

int 10h

;**********3 bit*****************

mov ax,si

;shr ax,12

;przesuwa bit w prawo o 4

AND al,0F0h

shr al,4

cmp al,10 ;porownuje do 10

 

jg lit2 ;jesli wieksza przeskocz do ja

 

 

add al,48 ;dodaje

jmp licz2 ;skok bezwarunkowy

lit2: ;tu leci skok warunkowy

add al,55 ;dodaje

licz2: ;tu leci skok bezwarunkowy

 

mov ah,0Eh

int 10h

;***********************ost 4 bit*******************

mov ax,si

 

AND al,0Fh

cmp al,10 ;porownuje do 10

 

jg lit3 ;jesli wieksza przeskocz do ja

 

 

add al,48 ;dodaje

jmp licz3 ;skok bezwarunkowy

lit3: ;tu leci skok warunkowy

add al,55 ;dodaje

licz3: ;tu leci skok bezwarunkowy

 

mov ah,0Eh

int 10h

ret

 

ProgCom ENDS

END start

Opublikowano

Na przyszłość ja bym to napisał w c/c++ i zamienił na kod assembly. W gcc opcja -S.

A tak się da zrobić ?

Mam napisany program w c co robi dokladnie to samo

 

Hmm tylko ja musze miec napsiane w TASM

Opublikowano

e:\code\parser>gcc -O2 -S -c -masm=intel foo.c

e:\code\parser>type foo.c
#include <stdio.h>

int main() {

       puts("hello world");
       return 0;
}


e:\code\parser>type foo.s
       .file   "foo.c"
       .intel_syntax noprefix
       .def    ___main;        .scl    2;      .type   32;     .endef
       .section .rdata,"dr"
LC0:
       .ascii "hello world\0"
       .text
       .p2align 2,,3
.globl _main
       .def    _main;  .scl    2;      .type   32;     .endef
_main:
       push    ebp
       mov     ebp, esp
       and     esp, -16
       sub     esp, 16
       call    ___main
       mov     DWORD PTR [esp], OFFSET FLAT:LC0
       call    _puts
       xor     eax, eax
       leave
       ret
       .def    _puts;  .scl    2;      .type   32;     .endef

e:\code\parser>

 

 

 

Zrzut z mojej konsoli.

GCC tworzy plik .s z kodem asmebly.

 

 

Jeżeli skompilujesz kod z taką linią poleceń jak ja to otrzymasz swój algorytm w asm. Potem (jeżeli ogarniasz asma) możesz sobie lekko przerobić kod żeby działał pod Twoim TASM'em.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...