当前位置: 代码迷 >> 汇编语言 >> 几个汇编上文字显示的有关问题
  详细解决方案

几个汇编上文字显示的有关问题

热度:5558   发布时间:2013-02-26 00:00:00.0
几个汇编上文字显示的问题
第一个实验: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) 修改文字及背景颜色都是通过改写显示缓存来实现的.
  相关解决方案