Thông tin của tôi đến từ here. Bài tập yêu cầu một chương trình đọc không quá 20 ký tự, chuyển đổi các ký tự đó thành chữ hoa, và sau đó in đầu vào làm thủ đô.Tôi không hiểu cách sử dụng Gián đoạn 21, AH = 0ah
Tôi không biết cách truy cập dữ liệu nhập từ int21/AH = 0ah. Tôi thực sự không thể hỏi một câu hỏi chính xác hơn trừ khi tôi hiểu những gì được liên kết ở trên. Ai đó có thể giải thích? Ngoài ra, tôi đang sử dụng TASM nếu điều đó tạo ra bất kỳ sự khác biệt nào. Ngoài ra, tôi đang thử nghiệm này trên freedos.
UPDATE1:
Alright, nhờ sự giúp đỡ của bạn, tôi tin rằng tôi hiểu làm thế nào ngắt cần phải được thiết lập và hoạt động.
Setup: tôi phải chỉ định một ds: dx nơi tôi muốn đệm này để tồn tại
tôi phải thiết lập ds: dx đến 20 (trong đó đặt số tối đa của nhân vật bộ đệm có thể giữ)
tôi phải thiết lập ds: dx + 1-0 (mà tôi nghĩ rằng bằng cách nào đó thiết lập một số phút của các nhân vật để đọc trong)
Thực ra gọi int21/AH = 0AH, mà sẽ đi đến ds: dx và giải thích các byte được đặt trước. Nó sẽ ngăn chặn chương trình trong khi chờ đầu vào
int21/AH = 0AH sẽ điền từ ds: dx + 2 + n với sự đóng góp của tôi (trong đó n là số ký tự đầu vào bao gồm cả '\ r')
Câu hỏi của tôi bây giờ là làm cách nào để thực hiện điều này. Tôi vừa xem lại Tài liệu tham khảo ngôn ngữ hội x86 một lần nữa, nhưng chưa tìm thấy bất cứ điều gì hữu ích.
Mã Tôi đã có cho đến nay
assume cs:code,ds:code
code segment
start:
mov ax,code ;moves code segment into reg AX
mov ds,ax ;makes ds point to code segment
mov ah,0ah
int 21h
mov ax,1234h ;breakpoint
mov ah,9
mov dx,offset message
int 21h
endNow:
;;;;;;;;;;ends program;;;;;;;;;;
mov ah,0 ;terminate program
int 21h ;program ends
message db 'Hello world!!!',13,10,'$'
code ends
end start
Sau đó, nó hoạt động như int21/AH = 1h đọc trong một ký tự đơn. Tôi biết rằng ngắt đó đặt ký tự vào thanh ghi AL. Làm thế nào tôi sẽ tìm ra nơi bộ đệm của các nhân vật sẽ được? –
Ngoài ra, tôi vừa mới nhận ra. Bảng bù trừ có nghĩa là dữ liệu ký tự thực tế bắt đầu ở hai bit hoặc byte (có thể là byte), nơi dữ liệu trả về tồn tại trong bộ nhớ. Suy nghĩ? –
Có, đầu vào thực tế bắt đầu tại DS: DX + 2. Tuy nhiên, tệp này bỏ qua đầu vào đó và chỉ sử dụng chức năng đó để tạm dừng thực thi. –