所以我基本上是在做一個基本的命令列作業系統,我已經使它能夠接受鍵盤按鍵和一個程式,當我按下回車鍵時進入一個新的行,但我希望它在移動到一個新的行之前將命令存盤為一個字串,這樣我就可以將命令與用戶輸入進行比較,以便我可以使它列印一個字串或做一些事情,所以我們將如何連接所有的字符并形成一個字串,這是我到目前為止的代碼
。;bg
MOV AH, 06h
XOR AL, AL
XOR CX, CX
MOV DX, 184FH
MOV BH, 1Eh
INT 10H
;游標
MOV DH, 1
MOV DL, 30
MOV BH, 0
mov ah, 2
int 10h
;文本
mov ah, 0x0E
mov al, 'W'.
mov bh, 0x00
int 10h
mov ah, 0x0E
mov al, 'E'.
mov bh, 0x00
int 10h
mov ah, 0x0E
mov al, 'L'.
mov bh, 0x00
int 10h
mov ah, 0x0E
mov al, 'C'.
mov bh, 0x00
int 10h
mov ah, 0x0E
mov al, 'O'.
mov bh, 0x00
int 10h
mov ah, 0x0E
mov al, 'M'.
mov bh, 0x00
int 10h
mov ah, 0x0E
mov al, 'E'.
mov bh, 0x00
int 10h
mov ah, 0x0E
mov al, ' '.
mov bh, 0x00
int 10h
mov ah, 0x0E
mov al, 'T'
mov bh, 0x00
int 10h
mov ah, 0x0E
mov al, 'O'.
mov bh, 0x00
int 10h
mov ah, 0x0E
mov al, ' '.
mov bh, 0x00
int 10h
mov ah, 0x0E
mov al, 'D'
mov bh, 0x00
int 10h
mov ah, 0x0E
mov al, 'A'.
mov bh, 0x00
int 10h
mov ah, 0x0E
mov al, 'R'.
mov bh, 0x00
int 10h
mov ah, 0x0E
mov al, 'S'.
mov bh, 0x00
int 10h
mov ah, 0x0E
mov al, 'H'.
mov bh, 0x00
int 10h
mov ah, 0x0E
mov al, 'O'.
mov bh, 0x00
int 10h
mov ah, 0x0E
mov al, 'S'.
mov bh, 0x00
int 10h
;游標
mov dh, 3
mov dl, 2
mov bh, 0
mov ah, 2
int 10h
;命令列
鍵。
MOV AH,0
INT 16H
CMP AH, 28
je 換行
MOV AH, 0EH
int 10h
jmp鍵
換行。
add dh, 1
mov dl, 2
mov bh, 0
mov ah, 2
int 10h
jmp鍵
times 510-($-$$) db 0
dw 0xaa55
螢屏截圖。 程式的圖片
uj5u.com熱心網友回復:
作為第一個觀察,你在引導區中寫下了所有這些。這對于學習來說可能很好,但至少要意識到bootsector的512位元組大小限制。我的意思是,你不應該單獨輸出所有這些字符,而應該作為一個字串,這當然是你的問題所在,不是嗎。
首先解決輸出問題,輸入存盤問題也類似。
用這段代碼開始你的 bootsector 程式:
ORG 7C00h
xor ax, ax
mov ds, ax
mov es, ax
cld
在程式的底部,你插入了這樣的文字:
當你有很長的單字符輸出鏈時,你可以用下面的方法來替換整個輸出鏈:msg db 'WELCOME TO DARSHOS, 0.
msg db 'WELCOME TO DARSHOS', 0
times 510-($-$$) db 0
dw 0xAA55
;text>
;text
mov si, msg ; 加載SI中的資訊地址
mov bh, 0 ; DisplayPage
lodsb
更多
mov ah, 0Eh ; BIOS.Teletype
int 10h
lodsb ; 檢索一個字符,自動增加地址SI
cmp al, 0
jnz 更多
如果你的匯編器遵循NASM風格,mov si, msg加載訊息的地址。但如果你的匯編器遵循MASM風格,你將不得不寫mov si, offset msg來代替。
為了保存輸入的字符,你需要定義一個合適的緩沖區。 下面的buf行將允許一個最多 7 個字符的文本命令,后面是分隔符回車。你需要定界符,以便以后知道完整的命令是多長。
buf db '........'
msg db 'WELCOME TO DARSHOS', 0
times 510-($-$$) db 0
dw 0xAA55
而這是你如何填充它的:
;commandline
鍵。
mov di, buf ; 在DI中加載緩沖區的地址
下一步。
mov ah, 00h ; BIOS.GetKeyboardKey
int 16h ; -> AX
stosb ; 存盤在緩沖區,自動增加地址DI
mov bh, 0 ; DisplayPage
mov ah, 0Eh ; BIOS.Teletype
int 10h
cmp al, 13
jne Next ; 還沒有回車
mov al, 10 ; 讓后續的換行符完成 "換行 "序列
int 10h
...
在...處,你可以開始處理形成命令的字串,如CLS,TIME,或任何適合你的命令。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/320387.html
標籤:
下一篇:如何為8位計算機設定跳轉條件?
