王爽 汇编实验9

assume cs:codesg

datasg segment
    db 'welcome to masm' 
datasg ends

codesg segment
start:  mov ax,datasg
        mov ds,ax
        mov bx,0
        mov ax,0b800h
        mov es,ax
        mov di,07C0h  
        mov cx,15

s:      mov al,[bx]
        mov es:[di],al
        mov ax,02h
        mov es:[di+1],ax
        inc bx
        add di,2
        loop s

        mov ax,4c00h
        int 21h
codesg ends
end start

这个题首先要计算中间行的地址
一行80个字符 每页显示25行
中间行是13行
一行有160个字节 *13 = 2080
换成16进制 0820h 可知其尾部偏移地址是 081fh
头部地址 向前偏移 10 (0820h - 000ah) 0780h

因为一行是160字节 标语是 30字节 130/2 = 65 所以为了居中
偏移的距离应该是 64 or 66字节(如果用单数会占用到属性位置导致错误)
64换算成16进制 40 于是 地址从07c0h 开始即为中间

你可能感兴趣的:(王爽 汇编实验9)