帮忙解读程序
来源:百度知道 编辑: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
这个程序的功能是在运行窗口中显示字符,然后运动,但我看的不大懂,麻烦高人在旁边加些注释
可以的话,我想高人们能具体说出每个模块的功能,比如哪部分显示,运动,延迟...谢谢了
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