assume cs:code,ss:stack
data segment
db 'welcome to masm!',0
data ends
stack segment
dw 8 dup (0)
stack ends
code segment
start: mov dh,8
mov dl,3
mov cl,2
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str: push ax ; 寄存器入栈。
push dx
push si
mov di,0 ;ES段初始
mov bx,0
mov ax,0b800h
mov es,ax
mov al,160 ;至8行
mul dh
mov bx,ax ;送入BX
mov dh,0
add bx,dx ;至3列
add bx,dx
s:push cx ;存CL值
mov ch,0
mov cl,ds:[si] ;判断是否为0
jcxz ok
pop cx ;弹出,以用到CL值即02H
mov al,ds:[si] ;颜色属性送高位
mov ah,cl
mov es:[bx+di],ax ;第一字母及属性送8行3列
inc si
add di,2
jmp short s
ok:pop cx ;jcxz过来后,莫忘POP CX
pop si
pop dx
pop ax
ret
code ends
end start
- [mess] 博主加油啊,多实践还是很有必要的,虽然不能上网~ 12/18 11:29
- [crazyman] 在接下来的那个显示数据子程序中,也要考虑一下dx值不为0的情况,这样就能支持到32位的数据了。 07/24 09:41
- [游客] 没问题。 07/23 11:17
- [游客] 嗯,没问题。 07/20 10:12
- [游客] 嗯。 07/20 10:11
- [wsay666] 重新修改程序,使三行纵向对齐排列如下: assume cs:code,ds:data data 07/18 00:02
- [mywiil] 要明白和理解jmp跳转是基于相对位移而不是绝对地址的。 这个题目很经典,而且能够真正检验出你这章知 07/17 16:33
- [wsay666] 学习了 07/16 12:10
- [游客] 只要令[bx+1]为0即可. =========== 不准确。应该是“只要令[bx+1]处的字单 07/16 10:17
- [游客] 对。 07/16 09:50
[ 游客 发表于 2009-07-23 11:17 ]
没问题。