实验10.1 我的答案
assume cs:codedata 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:
mov ch,0
jcxz r
mov es:,cl
mov es:,02h
add bp,2
inc si
jmp short l
r:ret
code ends
end start
代码编写半小时 调试三小时
页:
[1]