检测点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