INCLUDE Irvine16.inc
.code
main PROC
mov ax,@data
mov ds,ax
mov si, 0b800h
mov word ptr [si], 44h
mov word ptr [si+2] 0701h
mov ah, 08h
int 21h
exit
main ENDP
对上面做了修改 . 它现在组装,但什么也没显示 .
3 回答
-1
示例示例:
name "hello-world"
org 100h
; set video mode
mov ax, 3 ; text mode 80x25, 16 colors, 8 pages (ah=0, al=3)
int 10h ; do it!
; cancel blinking and enable all 16 colors:
mov ax, 1003h
mov bx, 0
int 10h
; set segment register:
mov ax, 0b800h
mov ds, ax
; print "hello world"
; first byte is ascii code, second byte is color code.
mov [02h], 'h'
mov [04h], 'e'
mov [06h], 'l'
mov [08h], 'l'
mov [0ah], 'o'
mov [0ch], ','
mov [0eh], 'w'
mov [10h], 'o'
mov [12h], 'r'
mov [14h], 'l'
mov [16h], 'd'
mov [18h], '!'
; color all characters:
mov cx, 12 ; number of characters.
mov di, 03h ; start from byte after 'h'
c: mov [di], 11101100b ; light red(1100) on yellow(1110)
add di, 2 ; skip over next ascii code in vga memory.
loop c
; wait for any key press:
mov ah, 0
int 16h
ret
2)字母加颜色一起形成一个单词 . 在视频缓冲区中首先是字母然后是颜色 . 背景和前景色使用每个半字节(4位) . 由于“小端字节”(google for it),单词应该具有格式颜色/字母,例如白色/蓝色/'D'= 7144h
这是与Irvine16兼容的示例:
INCLUDE Irvine16.inc
INCLUDELIB Irvine16.lib
.CODE
main PROC
; mov ax,@data ; No .DATA in this example
; mov ds,ax
mov si, 0b800h ; Initialize ES with video buffer
mov es, si
xor si, si ; Position 0 is top left
mov word ptr es:[si], 7144h ; White background ('7'), blue foreground (1), letter 'D' (44)
mov ah, 08h ; Wait for key - http://www.ctyme.com/intr/rb-2561.htm
int 21h
exit ; Irvine16: end of program
main ENDP
END main
3 回答
示例示例:
希望这个样本可以帮助你
1)0b800h是视频缓冲区的 segment 地址 .
mov word ptr [si], 44h
仅解决DS
中段地址的 offset (此处:0b800h) - 而DS
未指向视频缓冲区 . 我建议将视频片段加载到ES
并使用段覆盖(ES:
) .2)字母加颜色一起形成一个单词 . 在视频缓冲区中首先是字母然后是颜色 . 背景和前景色使用每个半字节(4位) . 由于“小端字节”(google for it),单词应该具有格式颜色/字母,例如白色/蓝色/'D'= 7144h
这是与Irvine16兼容的示例:
看一下清单15:
http://stuff.pypt.lt/ggt80x86a/asm8.htm