assume cs:code,ds:data data segment db 'welcome to masm!' db 2H,24H,71H ;字符串属性值 data ends code segment display PROC near push ax ; 保存ax寄存器的内容 push bx ; 保存bx寄存器的内容 push cx ; 保存cx寄存器的内容 push si ; 保存si寄存器的内容 mov ax,0b800H mov es,ax ;80×25彩色字符模式显示缓冲区段地址送入es mov cx,10h ; 计数器cx置为16进制10 mov bx,0 ; 将bx寄存器清零 mov si,0 ; 将si寄存器清零 s0: mov ax,[bx] mov es:[0720h+si+bx],ax mov al,2h mov byte ptr es:[0721h+si+bx],al inc bx inc si loop s0 mov cx,10h mov bx,0 mov si,0 s1: mov ax,[bx] mov es:[07c0h+si+bx],ax mov al,24h mov byte ptr es:[07c1h+si+bx],al inc bx inc si loop s1 mov cx,10h mov bx,0 mov si,0 s2: mov ax,[bx] mov es:[0860h+si+bx],ax mov al,71h mov byte ptr es:[0861h+si+bx],al inc bx inc si loop s2 pop si pop cx pop bx pop ax ret display ENDP start: mov ax,data mov ds,ax ;字符串及属性值所在段的段地址送入ds call display mov ax,4c00h int 21h code ends end start在该代码中加入详细的注释
时间: 2024-02-15 21:27:27 浏览: 65
; 假设 cs:code,ds:data
data segment
db 'welcome to masm!' ; 数据段定义了一个字符串 'welcome to masm!'
db 2H,24H,71H ; 数据段定义了三个字节的属性值,用于控制字符显示颜色
data ends
code segment
display PROC near
push ax ; 保存ax寄存器的内容
push bx ; 保存bx寄存器的内容
push cx ; 保存cx寄存器的内容
push si ; 保存si寄存器的内容
mov ax,0b800H ; 将80×25彩色字符模式显示缓冲区段地址送入ax寄存器
mov es,ax ; 将ax寄存器中的地址值送入es寄存器
mov cx,10h ; 将计数器cx置为16进制10
mov bx,0 ; 将bx寄存器清零
mov si,0 ; 将si寄存器清零
s0: ; 循环读取数据段中的值并将其写入显示缓冲区段
mov ax,[bx] ; 从数据段中读取一个字节,存入ax寄存器
mov es:[0720h+si+bx],ax ; 将ax寄存器中的值写入显示缓冲区段中
mov al,2h ; 将属性值 2H 存入 al 寄存器
mov byte ptr es:[0721h+si+bx],al ; 将属性值写入显示缓冲区段中
inc bx
inc si
loop s0 ; 循环执行,直到计数器cx递减为0
mov cx,10h ; 将计数器cx置为16进制10
mov bx,0 ; 将bx寄存器清零
mov si,0 ; 将si寄存器清零
s1: ; 循环读取数据段中的值并将其写入显示缓冲区段
mov ax,[bx]
mov es:[07c0h+si+bx],ax
mov al,24h ; 将属性值 24H 存入 al 寄存器
mov byte ptr es:[07c1h+si+bx],al
inc bx
inc si
loop s1
mov cx,10h
mov bx,0
mov si,0
s2: ; 循环读取数据段中的值并将其写入显示缓冲区段
mov ax,[bx]
mov es:[0860h+si+bx],ax
mov al,71h ; 将属性值 71H 存入 al 寄存器
mov byte ptr es:[0861h+si+bx],al
inc bx
inc si
loop s2
pop si ; 恢复寄存器内容
pop cx
pop bx
pop ax
ret
display ENDP
start:
mov ax,data ; 将数据段地址送入ax寄存器
mov ds,ax ; 将ax寄存器中的地址值送入ds寄存器
call display ; 调用显示函数
mov ax,4c00h ; 将程序终止码送入ax寄存器
int 21h ; 调用DOS系统功能中断
code ends
end start ; 程序结束标记
阅读全文