КАПУСТА: почитай,обсуди,отдохни!

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » КАПУСТА: почитай,обсуди,отдохни! » Ассемблер » Курсовая,Ассемблер,Перекодировщик вводимых с клавиатуры чисел


Курсовая,Ассемблер,Перекодировщик вводимых с клавиатуры чисел

Сообщений 1 страница 10 из 20

1

Задание.
Перекодировщик вводимых с клавиатуры чисел. Двоичный-десятичный-шестнадцатиричный код. (С клавиатуры вводятся числа в любом из этих кодов). Перекодированное число в двух других кодах выводятся на экран.   

Это наш курсач с Гордым. Почемуто он у нас неочень двигается,но чтото  у нас уже есть:

.model small

.386

.stack 100h

.data

firstmess db "Select counting system,please: d-decimal; b-binary,h-hexadecimal",13,10,'$'
mainMess db "Enter the number",13,10,'$'
endMess db "Programm has finished its work. Do You want to repeat?(y/n)",13,10,'$'
ent db 13,10,'$'
KOL Dw ?

.code

  MAIN PROC FAR

    MOV AX,@data
    MOV DS,AX
    MOV ES,AX
;------Programma---------
REPEAT:
;--------4istka---------

    MOV  AH,0      ;номер функции установки режима дисплея
    MOV  AL,2      ;код режима 80*25 черно-белого
    INT  10H       ;очистка экрана

;--------End $istka------

;    ----DIALOG------------
     
       MOV ah,9h               ;код вывода на экран
     MOV dx,OFFSET firstmess ;заносим в ДХ адрес строки
       INT 21h                 ;вызов прерывания для вывода
     

     mov ah,1h         ;код ввода
     int 21h           ;прерывания на ввод
     cmp al,"b"        ;сраснение с указателем на двоичную СС
     JE goBinary ;переход если да

     cmp al,"h"   ;шестнадцатиричная
     JE goHD ;если да - переход

     cmp al,"d"        ;десятичная
     JE goDecimal ; переход если да

     JMP REPEAT  ;Переход в начало.Если введеная неверная буква
;    ---End dialog---------

;--------PART FOR BINARY-----------

goBinary:     

        MOV ah,9h               ;код вывода на экран
     MOV dx,OFFSET ent       ;заносим в ДХ адрес Entera
       INT 21h                 ;вызов прерывания для вывода

        MOV ah,9h               ;код вывода на экран
     MOV dx,OFFSET mainMess  ;заносим в ДХ адрес строки
       INT 21h                 ;вызов прерывания для вывода

;---------4Itaem------------------
        SUB CX,CX
     
FOR1:     MOV AH,1
     INT 21H
     
     CMP AL,'1'
     JNE p1
     JMP p2
p1:     CMP AL,'0'
     JNE PEREV
p2:
     MOV DL,AL
     SUB DH,DH
     PUSH DX
     INC CX
     JMP FOR1
;---------End 4itaem---------------

;---------Perevod--------------------
PEREV:     MOV KOL,CX
        SUB EAX,EAX
     SUB BX,BX
     
FOR2:
     SUB EDX,EDX
     POP BX
     CMP BX,0
     JE  FOR2
     SUB KOL,CX
     MOV EDX,1
     MOV BX,CX
     MOV CX,kol
     SHL EDX,CL
     ADD EAX,EDX
     MOV CX,BX
     ADD KOL,CX

        LOOP FOR2

;---------END Perevod------------------

;----------Vuvod----------------------

    MOV EBX,EAX
     MOV ah,9h               ;код вывода на экран
     MOV dx,OFFSET ent       ;заносим в ДХ адрес строки
       INT 21h                 ;вызов прерывания для вывода

;-----------End Vuvod-----------------

        MOV ah,9h               ;код вывода на экран
     MOV dx,OFFSET ent       ;заносим в ДХ адрес строки
       INT 21h                 ;вызов прерывания для вывода

        JMP Povtor              ; Переход на конец

;--------END BINARY------------------

;--------PART FOR DECIMAL------------

goDecimal:

        MOV ah,9h               ;код вывода на экран
     MOV dx,OFFSET ent       ;заносим в ДХ адрес Entera
       INT 21h                 ;вызов прерывания для вывода

        MOV ah,9h               ;код вывода на экран
     MOV dx,OFFSET mainMess  ;заносим в ДХ адрес строки
       INT 21h                 ;вызов прерывания для вывода

        MOV ah,9h               ;код вывода на экран
     MOV dx,OFFSET ent       ;заносим в ДХ адрес строки
       INT 21h                 ;вызов прерывания для вывода


        MOV ah,9h               ;код вывода на экран
     MOV dx,OFFSET ent       ;заносим в ДХ адрес строки
       INT 21h                 ;вызов прерывания для вывода

        JMP Povtor              ;переход на конец

;--------END DECIMAL-------------------

;--------PATRT FOR HEXADECIMAL---------

goHD:

        MOV ah,9h               ;код вывода на экран
     MOV dx,OFFSET ent       ;заносим в ДХ адрес Entera
       INT 21h                 ;вызов прерывания для вывода

        MOV ah,9h               ;код вывода на экран
     MOV dx,OFFSET mainMess     ;заносим в ДХ адрес строки
       INT 21h                 ;вызов прерывания для вывода

        MOV ah,9h               ;код вывода на экран
     MOV dx,OFFSET ent     ;заносим в ДХ адрес строки
       INT 21h                 ;вызов прерывания для вывода


       
        MOV ah,9h               ;код вывода на экран
     MOV dx,OFFSET ent     ;заносим в ДХ адрес Entera
       INT 21h                 ;вызов прерывания для вывода

       JMP Povtor            ;Переход на конец программы

;--------END HD------------------------

;--------Povtor?--------

Povtor:

     MOV ah,9h             ;код вывода
     MOV dx,OFFSET endMess ;Адрес в ДХ
       INT 21h               ;Прерывание вывода
     
     mov ah,1h             ;Код ввода
     int 21h               ;Прерывание ввода
     cmp al,"y"            ;Сравнение ответа
     JE REPEAT             ;Повтор если да

;--------Povtor End------

;---End-------------------

    MOV AH,4CH  ;окончание
    INT 21H     ;Программы

MAIN ENDP
     END MAIN

0

2

При вводе двоичных предлагаю их сначала закинуть в стэк а потом из стека в пару регистров ЕДХ ЕБХ

0

3

Гордый написал(а):

При вводе двоичных предлагаю их сначала закинуть в стэк а потом из стека в пару регистров ЕДХ ЕБХ

А как регистры переводить будем?

0

4

а уже потом их раскидывать по СС

0

5

Лан,вот Сереги код,как его на 2 регистра переделать?!
;------------------------------------------------------------
; перевод из десятичной в двоичную систему счисления
; для положительных и отрицательных чисел
; вывод: в формате строки
;------------------------------------------------------------
.model small
.data
value dw -122d     ; тестовое число - десятичное   
buffer db 16 dup(0),0
minus  db '1',0
.stack
db 100h dup (?)
.code
Start:
mov ax, dgroup
mov ds, ax

cmp value, 0
jl @@11
jmp @@12
@@11:
mov di, 1
mov ax, value
not ax
add ax, 1b
jmp @@13
@@12:
mov ax, value
@@13:
mov cx, 16               ; количество битов в рег. сх
mov si, offset buffer
@@10:
shl ax, 1                ;сдвигаем старший бит во флаг
         ;переноса CF
mov byte ptr [si], '0'   ;по умолчанию, пусть будет 0
jnc @@20     ;если нет переноса, то переход
mov byte ptr [si], '1'   ;иначе занести в buffer 1
@@20:
inc si    ;адрес следующего элемента
loop @@10

cmp di,1
jne @@30
mov di, offset buffer
mov byte ptr [di], '-'
@@30:
call Output

mov ax, 4c00h
int 21h
;---------------------------------
Output:
mov cx,10000b ; длина строки для вывода
mov ah,40h    ; функц. вывода
mov bx,1      ; дескриптор экрана
mov dx,di ;offset buffer ; адрес строки
int 21h

ret
END Start

И Вторая
;------------------------------------------------------------
; перевод из шестнадцатиричной в двоичную систему счисления
; для положительных и отрицательных чисел
; вывод: в формате строки
;------------------------------------------------------------
.model small
.data
value dw -122h     ; тестовое число - шестнадцатиричное   
buffer db 16 dup(0),0
minus  db '1',0
.stack
db 100h dup (?)
.code
Start:
mov ax, dgroup
mov ds, ax

cmp value, 0
jl @@11
jmp @@12
@@11:
mov di, 1
mov ax, value
not ax
add ax, 1b
jmp @@13
@@12:
mov ax, value
@@13:
mov cx, 16               ; количество битов в рег. сх
mov si, offset buffer
@@10:
shl ax, 1                ;сдвигаем старший бит во флаг
         ;переноса CF
mov byte ptr [si], '0'   ;по умолчанию, пусть будет 0
jnc @@20     ;если нет переноса, то переход
mov byte ptr [si], '1'   ;иначе занести в buffer 1
@@20:
inc si    ;адрес следующего элемента
loop @@10

cmp di,1
jne @@30
mov di, offset buffer
mov byte ptr [di], '-'
@@30:
call Output

mov ax, 4c00h
int 21h
;---------------------------------
Output:
mov cx,10000b ; длина строки для вывода
mov ah,40h    ; функц. вывода
mov bx,1      ; дескриптор экрана
mov dx,di ;offset buffer ; адрес строки
int 21h

ret
END Start

0

6

все очень просто, сказки обман (с)

Надо думать)) А вот думать как раз лень. В общем надо разобарть его по косточкам, иначе не переделаеш

0

7

Гордый написал(а):

Надо думать)) А вот думать как раз лень. В общем надо разобарть его по косточкам, иначе не переделаеш

Может ну его в пень? делаем с одним регистром?

0

8

в этот код надо впихнуть считывание с клавиатуры. Вот там то и зашить 2 регистра

0

9

один регистр - один бал. Из 100. Больше тройки и не подумают ставить

0

10

Гордый написал(а):

в этот код надо впихнуть считывание с клавиатуры. Вот там то и зашить 2 регистра

О_о а это как это?

Administrator написал(а):

value dw -122h

Он берет слово,а 64 битное слово есть?

0


Вы здесь » КАПУСТА: почитай,обсуди,отдохни! » Ассемблер » Курсовая,Ассемблер,Перекодировщик вводимых с клавиатуры чисел