1. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

Ассемблер: задачка

Тема в разделе "Другие", создана пользователем Trishi, 5 май 2007.

  1. Trishi

    Trishi Гость

    Репутация:
    0
    Тут такое дело. Семестр уже к концу подходит, а ассемблер как был не понятен в начале, так и сейчас смутно с ним.
    Вот задачка: "Задать целое число в регистре. Написать программу на ассемблере, которая преобразует данное число в текстовую строку (в десятичной системе) и выведет его на терминал. Число должно быть: целое 1 байт без знака."
    Если можно, напишите ее плиз, и с пояснениями, потому что разобраться все-таки хочется.
     
  2. Hex_Vulture

    Hex_Vulture Гость

    Репутация:
    0
    держи:
    Код:
    ;==============================================================
    ; Вывод целого числа-слова со знаком или без знака
    ;  Обращение: call procoutnum
    ;  На входе: ax - выводимое число
    ;			 dh - число со знаком (1) или без знака (0)
    ;			 dl - ширина поля вывода (>=0)
    ;	(если поле больше, чем надо, то слева добавляются пробелы,
    ;	 если меньше - выводится только число)
    ;--------------------------------------------------------------
    procoutnum proc far
    push bp
    mov bp,sp
    push ax
    push dx
    push si
    sub sp,6		; отвести 6 байтов в стеке под число
    ; учет знака
    cmp dh,1		; вывод со знаком (dh=1)?
    jne pon0
    cmp ax,0
    jge pon0
    mov dh,2		; если вывод со знаком и ax<0,
    neg ax		 ; то dh:=2, ax:=abs(ax)
    pon0: push dx		 ; спасти dh (знак) и dl (ширину)
    ; запись цифр числа в стек (в обратном порядке)
    xor si,si	  ; si - кол-во цифр в числе
    pon1: mov dx,0		; ax -> (dx,ax)
    div cs:ten	 ; ax=ax div 10; dx=ax mod 10
    add dl,'0'
    mov [bp-8+si],dl; цифра -> стек
    inc si
    or  ax,ax
    jnz pon1		; еще не 0
    ; запись минуса, если есть, в стек
    pop dx
    cmp dh,2
    jne pon2
    mov byte ptr [bp-8+si],'-'
    inc si
    ; печать пробелов впереди
    pon2: mov dh,0		; dx - ширина поля вывода
    mov ah,2		; функция 02 прерывания 21h
    pon21: cmp dx,si
    jle pon3		; ширина <= длина числа
    push dx
    mov dl,' '
    int 21h
    pop dx
    dec dx
    jmp pon21
    ; печать (минуса и) цифр
    pon3: dec si
    mov dl,[bp-8+si]
    int 21h
    or  si,si
    jnz pon3
    ; выход из процедуры
    add sp,6
    pop si
    pop dx
    pop ax
    pop bp
    ret
    ten  dw 10
    procoutnum endp
     
Загрузка...
Похожие Темы - Ассемблер задачка
  1. Skeed
    Ответов:
    0
    Просмотров:
    226
  2. alalai
    Ответов:
    0
    Просмотров:
    1.077
  3. Dimkawshm
    Ответов:
    2
    Просмотров:
    1.202
  4. Victoria123
    Ответов:
    0
    Просмотров:
    1.036
  5. MariyaStarikova
    Ответов:
    0
    Просмотров:
    1.070

Поделиться этой страницей