马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
assume cs:code
data segment
db 'Welcome to masm!',0
data ends
code segment
start:
mov dh,8
mov dl,3
mov cl,2
mov ax,data
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str:
mov ax,0b800h ;显存段地址
mov es,ax
;计算显存起始偏移地址
;偏移地址 = 行数*160+列数*2 注意列数从0开始
mov ax,160
mov bl,dh
and bx,00ffh
mov cx,dx ;进行16位乘法会占用dx 把dx数据临时存放在cx 调试半天才发现
mul bx
mov dx,cx
mov bp,ax;因为一页显示内存最大偏移量为4000小于65536 所以ax中结果为偏移量
mov al,2
mul dl
add bp,ax ; bx结果为最终的起始偏移地址
l:
mov cl,ds:[si]
mov ch,0
jcxz r
mov es:[bp],cl
mov es:[bp+1],02h
add bp,2
inc si
jmp short l
r: ret
code ends
end start
代码编写半小时 调试三小时 |