Использование подсказки для целых чисел на ассемблере - PullRequest
0 голосов
/ 06 февраля 2010
promptl BYTE "Enter a signed integer: ",0
prompt2 BYTE "The sum of the integers is: ",0

Будет ли запрашивать у пользователя два целых числа, используя язык ассемблера, и как мне добавить два целых числа, используя язык ассемблера?

Ответы [ 2 ]

2 голосов
/ 06 февраля 2010

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

Итак ...

  promptl BYTE "Enter a signed integer: ",0

просто определит переменную prompt1, которая будет содержать эту строку и будет завершена (дополнительным) байтом, содержащим 0. Он нигде не выведет приглашение.

Если вы хотите отобразить это сообщение, вам обычно нужно вызвать примитивную функцию системы, чтобы сделать это. В мире MS-DOS многие из этих базовых услуг предоставляются вызовами известного INT $ 21 (Прерывание # 21), предварительно загрузив регистр A с числовым кодом, указывающим требуемый «сервис» (вместе с дополнительными регистрами и т. д. в зависимости от конкретного «желаемого» сервиса).

Итак, в мире MS-DOS начало вашей программы может выглядеть примерно так: Затем вам нужно будет преобразовать входное значение в целое число, сохранить его в рабочей переменной, заново запросить пользователя, получить другое значение, преобразовать его и, наконец, добавить эти два значения. Конечно, вы бы, вероятно, ввели подпрограммы, чтобы вы могли обрабатывать повторяющиеся задачи без чрезмерного дублирования кода.

prompt1 byte "Enter a signed integer: "   ; btw in most assemblers the explicit added null char is not needed.
inputStr db 50,?      ; defines a variable where to store the user's response (up to 50 bytes)

; prompt the user
        mov dx, offset prompt1
        mov ah, 9
        int 21h
; input a string: 
        mov dx, offset inputStr
        mov ah, 0ah
        int 21h

;etc...
2 голосов
/ 06 февраля 2010

Мой 6502 немного ржавый (нет, не сам чип, мои навыки) * но что-то вроде этого? [Вы не сказали, какой язык ассемблера вы использовали :-)]

LDX #prompt1
LDA #prompt2
CLC
ADC
BCS &overflow
RTS
.overflow
' handle the overflow here..
  • Эта шутка (с) MJV, 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...