实验8:分析以下程序
assume cs:codesg
codesg segment
mov ax,4c00h
int 21h
start: mov ax,0
s: nop
nop
mov di,offset s
mov si,offset s2
mov ax,cs:[si]
mov cs:[di],ax
s0: jmp short s
s1: mov ax,0
int 21h
mov ax,0
s2: jmp short s1
nop
codesg ends
end start
从start开始运行,跳过两个nop,四个mov把s2的字节拷到s处,
s0跳转s,s执行jmp short s1对应的机器码ebf6,意思是跳转-8,
即执行mov ax,4c00h,然后int 21h结束。s1始终未执行。
实验9:
在屏幕中间显示3行welcome to masm!,具体百度。
懒得数数,直接显示在左边。本想用栈+两层循环,把颜色和偏移地址都用栈取,有点麻烦不写了。
assume cs:codesg
data segment
db 'welcome to masm!'
data ends
codesg segment
start:
mov ax,0b800h
mov es,ax
mov ax,data
mov ds,ax
mov cx,16
mov sp,cx
mov si,0
s:
mov al,[si]
mov bx,si
mov es:[1760+si+bx],al
mov es:[1920+si+bx],al
mov es:[2080+si+bx],al
mov al,00000010b
mov es:[1760+1+si+bx],al
mov al,00100100b
mov es:[1921+si+bx],al
mov al,01110001b
mov es:[2081+si+bx],al
inc si
loop s
mov ax,4c00h
int 21h
codesg ends
end start