第一个实验:lab1_1
DSEG SEGMENT
string1 db 'Move the cursor backward.'
string2 db 'Move the cursor backward.'
mess1 db 'Match.',13,10,'$'
mess2 db 'No match.',13,10,'$'
DSEG ENDS
CSEG SEGMENT
assume cs:CSEG, ds:DSEG, es:DSEG
start: mov ax, dseg
mov ds, ax
mov es, ax
lea si,string1
lea di,string2
cld
mov cx,25
repz cmpsb
jz match
lea dx,mess2
jmp short disp
match:
lea dx,mess1
disp: mov ah,09h
int 21h
mov ax, 4c00h
int 21h
CSEG ENDS
end start
第二个实验:lab1_2
data segment
db 'welcome to masm!'
data ends
assume cs:code
code segment
start: mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov si,0
mov di,10*160+80 ;第十行中间
mov cx,16
s1: mov al,ds:[si]
mov ah,00000010B ;绿色
mov es:[di],ax
inc si
inc di
inc di
loop s1
mov si,0
mov di,11*160+80 ;第十一行中间
mov cx,16
s2: mov al,ds:[si]
mov ah,00100100B ;绿底红色
mov es:[di],ax
inc si
inc di
inc di
loop s2
mov si,0
mov di,12*160+80 ;第十二行中间
mov cx,16
s3: mov al,ds:[si]
mov ah,01110001B ;白底蓝色
mov es:[di],ax
inc si
inc di
inc di
loop s3
mov ax,4c00h
int 21h ;
code ends
end start
麻烦帮忙解答几个思考题:
四、思考题
1) 上述实验中用e修改数据段的内容,是否改变原文件lab1_1.asm的内容?
2) 用单步执行命令t运行程序, 运行到mov ax, 4c00h, int 21h指令后,cs和ip寄存器内容前后有何变化,产生变化的原因是什么?
3) lab1_2 中是如何实现修改文字及背景颜色的?
------解决方案--------------------------------------------------------
1) 这个该怎么回答呢? 用E修改数据段的内容,修改的是内存中的数据,在测试过程中是有变化的,但只要不写文件,调试完以后,再次载入文件进行测试的时候,内容还是原来的。
2) 前后有何变化,自己用T跟踪以下就知道了。 变化的原因是调用了中断 INT 21H。
3) 修改文字及背景颜色都是通过改写显示缓存来实现的.