Моя задача - прочитать число с терминала (он же atoi ), а затем записать его обратно на терминал (он же itoa ).
Чтобы прочитатьЯ использую строку int 21h, ah 0ah
. Кажется, приятно, когда я проверяю это в отладчике. И тогда мои atoi и itoa также выглядят хорошо, за исключением того, что в itoa я использую int 21h, ah 02h
для отображения одного символа, но по какой-то причине он не отображается. Поэтому я вернулся к началу и заметил, что запись int 21h, ah 02h
(печать символа) сразу после int 21h, ah 0ah
(чтение строки) не дает результата.
; STACK SEGMENT
STSEG SEGMENT PARA STACK "STACK"
DB 64 DUP (0)
STSEG ENDS
; DATA SEGMENT
DSEG SEGMENT PARA PUBLIC "DATA"
startStr db "Enter a number : $"
inputError db "Number has incorrect chars.", 10, "$"
buffError db "Number is too big", 10, "$"
bufferSize DB 16 ; 15 chars + RETURN
inputLength DB 0 ; number of read chars
buffer DB 16 DUP('?') ; actual buffer
DSEG ENDS
; CODE SEGMENT
CSEG SEGMENT PARA PUBLIC "CODE"
MAIN PROC FAR
ASSUME cs: CSEG, ds: DSEG, ss:STSEG
mov ax, DSEG
mov ds, ax
;lea dx, startStr
;call WRITING
;call READING
xor ax, ax
xor dx, dx
mov ah, 2
mov dl, 56
int 21h
;test display char before reading string - works fine
xor dx, dx
xor ax, ax
lea dx, bufferSize
mov ah, 10
int 21h
; reading string - works fine
xor ax, ax
xor dx, dx
mov ah, 2
mov dl, 56
int 21h
; trying to display char again - nothing
; call ATOI
; add ax, 15
; call ITOA
ret
MAIN ENDP
CSEG ENDS
END MAIN
Screenshoot
«8» - это символ, который я отображал в начале. «123» - это строка, которую я ввел, а затем нажал Enter.