帮忙解读程序

来源:百度知道 编辑:UC知道 时间:2024/06/01 01:47:39
assume cs:code,ds:data
data segment
db 'A',0
data ends
code segment
start: mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
xor di,di
mov cx,800
begin:
push cx
xor ax,ax
mov es:[di],ax
add di,2
mov cx,10
xor si,si
s2:
mov al,ds:[si]
mov ah,00111100b
mov es:[di],ax
inc si
add di,2
loop s2
call delay
sub di,20
pop cx
loop begin

mov ax,4c00h
int 21h

delay: push ax
push dx
mov dx,500h
xor ax,ax
s1: sub ax,1
sbb dx,1
cmp ax,0
jne s1
cmp dx,0
jne s1
pop dx
pop ax
ret

code ends
end start

这个程序的功能是在运行窗口中显示字符,然后运动,但我看的不大懂,麻烦高人在旁边加些注释
可以的话,我想高人们能具体说出每个模块的功能,比如哪部分显示,运动,延迟...谢谢了

assume cs:code,ds:data

data segment ;数据段
db 'A',0
data ends

code segment
start: mov ax,data ;定义数据段的段地址
mov ds,ax
mov ax,0b800h ;定义输出到屏幕的段地址
mov es,ax
xor di,di
mov cx,800

begin:
push cx ;由于是双重循环,所以先保存外循环的次数
xor ax,ax
mov es:[di],ax ;将显示的地方第一个字清0,免得显示不出运动
add di,2
mov cx,10 ;内循环,显示字符及其背景色
xor si,si
s2:
mov al,ds:[si] ;从数据段的首地址开始
mov ah,00111100b ;字符的前景和背景色,是红字+绿蓝背景+高亮
mov es:[di],ax ;输出
inc si
add di,2
loop s2

call delay ;调用延时子程序
sub di,20 ;要显示的地方后退20个字节,因内循环已前进了20个字节
pop cx ;弹出外循环次数
loop begin

mov ax,4c00h ;结束
int 21h

delay: push ax ;延时子程序
push dx
mov dx,500h
xor ax,ax
s1: sub ax,1
sbb dx,1 ;带位减
cmp ax,0
jne s1
cmp dx,0
jne s1
pop dx
pop ax
ret

code ends
end start