Как вывести значение, хранящееся в переменной в сборке 8086? - PullRequest
2 голосов
/ 14 марта 2012

Я изучаю программирование на ассемблере, используя "8086 emu" (Это программа. Эмулятор.) Я оцениваю базовое выражение -

a = b + c-d * e

Моя проблема в том, что когда я использую int 21h для получения значений, он принимает только одну цифру (символ) в качестве ввода для каждой переменной.

Также после оценки я не могу распечатать значение, хранящееся в переменной 'a' на экране вывода .

Кто-нибудь может дать решение обеих проблем?

Ответы [ 2 ]

2 голосов
/ 15 марта 2012

Для первой части (чтение в строке до нажатия на часовой ключ, например, на клавишу ввода), вы напишите цикл для этого.

Функция для анализа десятичной строки ASCII взначение регистра также необходимо.

Для печати на экране вам потребуется:

Вам также понадобится функция itoa (http://www.cplusplus.com/reference/clibrary/cstdlib/itoa/) для преобразования значения регистра в мультицифровая строка ASCII.

URL-адреса являются частью учебника по программированию сборки под названием «Список прерываний Ральфа Брауна (RBIL)».

0 голосов
/ 15 марта 2012

Для однобайтовых значений я использовал их для преобразования в строку и использования функции bios ... Раньше было что-то вроде этого:

 mov ah, 0
 mov al, ds:["yourvalueaddress"]
 mov di, 100 ;temporary string address
 mov cx, 0
 cmp ax, 0
 jge label1
 mov bl, 45
 mov ds:[di], bl
 add di, 1
 neg ax
 label1:
 mov bx, 10
 label2:
 add cx, 1
 mov dx, 0
 idiv bx
 push dx
 cmp ax, 0
 jne label2
 label3:
 pop dx
 add dx, 30h
 mov ds:[di], dl
 add di, 1
 add cx, -1
 cmp cx, 0
 jne label3:
 mov dl, 24h            ;ENDL
 mov ds:[di], dl        
 mov dx, 100         ;100 => temporary string address
 mov ah, 09h
 int 21h
...