收集到一下的必须资料
- 显示缓冲区80*25
- 一个字符占用两个字节,分别放ASCII码和属性
assume cs:code
code segment
start:
mov ax,0b800h
mov ds,ax
mov cx,7d0h ; 外循环设置为25*80,输出3次
mov si,0h
s0: mov byte ptr [si],20h
add si,1
mov byte ptr [si],0f8h
add si,1
loop s0
mov ax,4c00h
int 21h
code ends
end start
另一道题是显示特定字符的。
assume cs:code
code segment
start:
mov ax,0b800h
mov ds,ax ;
mov cx,3h ; 外循环设置为3次
mov si,0h
mov bx,906h ;14*80+35=0x483 偏移
s0: push cx
mov cx,10d
mov si,0d
s1: mov byte ptr [bx+si],31h ; 字符'1'
add si,1d
mov byte ptr [bx+si],07h
add si,1d
loop s1
add bx,160d ;转移至下一行
pop cx
loop s0
mov ax,4c00h
int 21h
code ends
end start
拷贝自己
前置知识
- 程序加载的时候ip的初始值都为0,这样我们就可以直接用CS加偏移拷贝程序自己了
-
还有一段安全的空间,00200-00fff
assume cs:code code segment mov dx,cs mov es,dx mov bx,0020h ;长度为3 mov ds,bx mov cx,19h ;长度为3 mov bx,0h ;长度为3 s: mov ax,es:[bx] ;长度为3 mov [bx],ax add bx,1h ;长度为3 loop s code ends end