У меня есть (на первый взгляд) простой вопрос для чтения в строке и его распечатки снова с использованием сборки на основе прерываний x86.Проблема у меня есть доступ к строке, которая была прочитана правильно.Переменная - input db 20, 0, " "
- моя начальная строка.После того, как я вызову входное прерывание, 0 теперь должен содержать длину строки, которую мне нужно сохранить и передать в cx
, когда я вызываю прерывание печати.20 - максимальная длина ввода.Я сталкиваюсь с двумя проблемами - как получить доступ к длине строки (я использую произвольное число, которое либо сокращает его, либо печатает мусор после конца), и как получить доступ к строке без битового числа вНачните?Любая помощь приветствуется, моя попытка:
(я использую tasm & Tlink под win 7 32 bit, а также под эмуляцией dos box)
;7. Read in a String of characters and Print the string back out.
.model small
.stack 100h
.data
colour db 00001111b
input db 20, 0, " "
strlen dw 20; this should be ?
.code
main:
call initsegs
call readstring
call printstring
call exit
PROC printstring
push ax bx cx dx bp
mov ah, 13h ; int 13h of 10h, print a string
mov al, 1 ; write mode: colour on bl
mov bh, 0 ; video page zero
mov bl, colour; colour attribute
mov cx, strlen; getting this is the problem
mov dh, 10; row
mov dl, 10; column
mov bp, offset input ; es:bp needs to point at string..this points to string but includes its max and length at the start
int 10h;
pop bp dx cx bx ax
ret
ENDP printstring
PROC readstring
push ax dx
mov ah, 0ah ; function a of 21h - read a string
mov dx, offset input ; reads string into DS:DX so DX needs be offset of string variable
int 21h ; call the interrupt
;mov strlen ....something
pop dx ax
ret
ENDP readstring
PROC exit
mov ah, 4ch
INT 21h
RET
ENDP Exit
PROC initsegs
push ax
mov ax, @DATA
mov ds, ax
mov es, ax
pop ax
RET
ENDP initsegs
end main