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

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

  1. Trishi

    Trishi Гость

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

    Hex_Vulture Гость

    держи:
    Код (Text):
    ;==============================================================
    ; Вывод целого числа-слова со знаком или без знака
    ;  Обращение: 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. alalai
    Ответов:
    0
    Просмотров:
    953
  2. Dimkawshm
    Ответов:
    2
    Просмотров:
    1.075
  3. Victoria123
    Ответов:
    0
    Просмотров:
    958
  4. MariyaStarikova
    Ответов:
    0
    Просмотров:
    978
  5. vladden
    Ответов:
    1
    Просмотров:
    1.842

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