|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 fishz 于 2011-5-5 12:32 编辑
王爽实验10,编写显示字符串子程序
(dh)=行号,取值范围0~24
(dl)=列号,取值范围0~79
(cl)=颜色,ds:si指向字符串的首地址
例子:在屏幕第8行,3列,用绿色显示data段中的字符串- assume ds:data, cs:code, ss:stack
- data segment
- db 'Welcome to masm!', 0 ;words
- color db 02h, 24h, 71h ;three colors
- data ends
- stack segment
- dw 8 dup(0)
- stack ends
- code segment
- start:
- mov ax, data
- mov ds, ax
-
- mov ax, stack
- mov ss, ax
-
- mov dh, 8
- mov dl, 3
- mov cl, 2
- mov si, 0
-
- call show_str ;show_str函数
-
- mov ax, 4c00h
- int 21h
-
- show_str:
- push bx
- push si
- push di
- push es
- push ax
- push cx
-
- mov bl, cl ;bl记录颜色
-
- mov al, 0ah ;显存每一行的像素数量/10 本来是a0,作为段地址时要除于10
- mov ah, 0
- dec dh
- mul dh ;第dh行
-
- ;mov dh, 2
- ;mul dh ;????
-
- add ax, 0b800h ;显存初地址
- ;dec dl
- ;adc al, dl ;第dl列
- ;adc ah, 0
- mov es, ax ;显存段地址
-
- dec dl
- mov al, dl
- mov ah, 0
- mov dl, 2
- mul dl ;没列占两个字节的空间,因为还有颜色的内存
- mov di, ax ;第dh行,第dl列
-
- display:
- mov cl, [si]
- mov ch, 0
- jcxz ok
- mov al, ds:[si]
- mov es:[di], al
- inc di
- ;pop cx ;pop颜色
- mov es:[di], bl
- inc si
- inc di
- jmp short display
-
- ok:
- pop cx
- pop ax
- pop es
- pop di
- pop si
- pop bx
-
- ret
- code ends
- end start
复制代码 为什么我的是在对话框的第四行显示的??? |
|