30/09/2018, 20:12

Cách xuất giá trị của ô nhớ ra màn hình

Mình có một bài tập trong sách môn Kiến trúc máy tính nhu sau: Viết đoạn chương trình ngôn ngữ assembly để cộng 5H với 3H, dùng các thanh ghi AL, BL.
Mình chép y hệt từ sách ra thì được thế này:

.MODEL SMALL

.DATA

.CODE

 MAIN PROC
    
     MOV AL, 05H
     
     
     mov BL, 03H
     ADD AL,BL
     MOV 100H,AL 
     
       ENDP
 END MAIN

mình đã chạy code bằng emu8086 và thành công nhưng màn hình không hiện ra kết quả mà tắt luôn?
Vậy làm sao để xuất kết quả ra màn hình? Ô nhớ 100H có ý nghĩa gì? Nó nằm ở đâu và làm thế nào để gọi ra giá trị trong nó?

Sáng Béo viết 22:17 ngày 30/09/2018

Ô nhớ 100H có ý nghĩa gì? Nó nằm ở đâu

ô nhớ 100H này là địa chỉ trực tiếp của ô nhớ, là DS:0100. Nó để lưu kết quả phép cộng vừa rồi.

làm sao để xuất kết quả ra màn hình?

MOV DL, [100h]
ADD DL, 30h
MOV AH, 02h
INT 21h 

làm thế nào để gọi ra giá trị trong nó?

Bạn có thể dump ô nhớ ra trong chế độ debug: d DS:0100 hoặc d 0100

Nguyễn Thành Trung viết 22:24 ngày 30/09/2018

bạn có thể code lại cả bài lên đây được không mình không hiểu phần

MOV DL, [100h]
ADD DL, 30h
MOV AH, 02h
INT 21h

là chồng lên phần trước hay viết riêng?
mình chạy thử nhưng không được.

Nguyễn Văn Tâm viết 22:21 ngày 30/09/2018

Muốn hiện ký tự ra màn hình bạn phải gọi hàm ngắt của DOS bằng cách
ADD AL, ‘0’ ; đổi sang ký tự asscii
MOV AH 2 ; gọi tới hàm in ký tự
MOV DL AL ;copy ký tự cần in từ AL vào DL, vì DL mặc định chứa giá trị đầu vào cho hàm in ký tự
INT 21h ;gọi tới dịch vụ của DOS

Sáng Béo viết 22:17 ngày 30/09/2018

là chồng lên phần trước hay viết riêng?mình chạy thử nhưng không được.

viết ngay sau chỗ MOV 100H, AL nhé
Không thì viết thủ tục xuất ra cũng đc.

Nguyễn Thành Trung viết 22:19 ngày 30/09/2018

viết ngay sau chỗ MOV 100H, AL nhé
Không thì viết thủ tục xuất ra cũng đc.

đã chạy thành công, cảm ơn bạn nhé

Thế Dân viết 22:13 ngày 30/09/2018

Theo mình biết thì đây là asm trên DOS OS, ko phải win nhé, bạn chạy đc, vì nó là phần mềm emulator DOS thôi, nên địa chỉ này ko phải là địa chỉ thực trên Mem đâu.

Sáng Béo viết 22:15 ngày 30/09/2018

Theo mình biết thì đây là asm trên DOS OS, ko phải win nhé, bạn chạy đc, vì nó là phần mềm emulator DOS thôi, nên địa chỉ này ko phải là địa chỉ thực trên Mem đâu.

thì theo mình nghĩ là thế, bạn hiểu rõ hơn thì có thể chỉ bảo thêm mà

Bài liên quan
0