第九章

来源:互联网 发布:炒黄金手机软件 知乎 编辑:程序博客网 时间:2024/04/28 15:09
 

检测点9.1 

(1)程序如下:

    assume cs:code

data segment

  db 0,0,0,0,0,0,0,0

data ends

code segment

start:mov ax,data

      mov ds,ax

      mov bx,0

      jmp word ptr [bx+1]

      mov ax,4c00h

      int 21h

code ends

ends start    

 理由是:要是jmp跳转后执行第一条指令,本条指令是word ptr是段内转移 必须满足ip=0 所以ds:[bx+1]的值必须为零 ,也就是data段的第二个数据必须为零 

     

     

 (2)第一空:bx

      第二空:cs

  (3) 本题可以先用debug将 内存2000:1000中的内容写为BE 00 06 00 .....然后再调    试可得到 

   cs=0006h  ip=00BEh

检测点9.2

 

;*****************************************

;实现在内存2000H段中查找第一个值为零的字节,

;找到后,将它的偏移地址存储到dx中

;******************************************

assume cs:code 

code segment 

start:

    mov ax,2000H

    mov ds,ax

    mov bx,0

  s:

    mov cl,[bx]

    mov ch,0

    jcxz ok

    inc bx

  jmp short s

  ok:

    mov dx,bx

    mov ax,4c00h

    int 21h

code ends 

     end start

注:利用jcxz判断cx是否等于零来发生跳转,注意判断的是一个字节!!

    

      

    

     

检测点9.3

;************************************************************

;利用loop指令,实现在内存2000H段中查找第一个值为零的byte,找到后

;将它的偏移地址存储到dx中

;*************************************************************

assume cs:code 

code segment

start:

   mov ax,2000H

   mov ds,ax

   mov bx,0

 s:

   mov cl,[bx]

   mov ch,0

   jmp ok

   inc bx

   loop s

 ok:

   dec bx

   mov dx,bx

   mov ax,4c00h

   int 21h

code ends

     end start

实验八: 

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

  注:程序可以正常运行,本程序主要考察了转移指令的使用!!!

实验九:

;****************************************************************************

;编程: 在屏幕中间分别显示绿色,绿底红色,白底蓝色的字符串'welcome to masm!'.

;实验原理见书中186页 

;****************************************************************************

assume cs:code,ds:data,es:display,ss:stack

data segment 

    db 'welcome to masm!'

    db 02H,24H,71H

data ends

stack segment

     db 16 dup(0)

stack ends

display segment 

    db 1024 dup(0)

display ends 

code segment

start:

    mov ax,data 

    mov ds,ax

    mov si,0

    mov ax,0b872H               ;定义12行中间的起始位置 

    mov es,ax

    mov cx,3

    mov di,0

;*****************************

;做三次外循环,每次显示一种颜色

;******************************

 s0:

    push cx

    push ax

    mov cx,16

    mov bx,0

;*********************************************

;做上六次内循环,将数据段定义的字符串写入内存中

;*********************************************

  s:

    

    mov al,[bx]

    mov es:[si],al

    mov al,[di+10h]

    mov es:[si+1],al

    add si,2

    inc bx

  loop s

    sub si,32                                ;将si回到初始位置     

    add si,160                               ;换行

    pop ax

    pop cx

    inc di                                   ;改变颜色

 loop s0

    mov ax,4c00h

    int 21h

code ends

     end start

原创粉丝点击