王爽汇编第九章节作业

第九章 转移指令的原理
;检测点9.1
;1,程序如下。若要使程序中的JMP指令执行后,CS:IP指向程序的第一条指令,在
;data段中应该定义哪些数据?
assume cs:code
data segment
     dw 0      ;测试结果dd,db,dw 都是指向CODE段的开始
data ends


code segment

start:
 mov ax,data
 mov ds,ax
 mov bx,0
 jmp word ptr [bx+1]
 
code ends
end start


;2,程序如下。
;补全程序,使JMP指令执行后,CS:IP指向程序的第一条指令
assume cs:code
data segment
dd 12345678H
data ends

code segment

start:
 mov ax,data
 mov ds,ax
 mov bx,0
 mov [bx],bx
 mov [bx+2],cs
 jmp dword ptr ds:[0]   ;此题关键是在于dw类型jmp寻址
 
code ends
end start


;3,用debug查看内存,结果如下:
;2000:1000 BE 00 06 00 00 00 .....
;则此时,CPU执行指令:
;mov ax,2000H
;mov es,ax
;jmp dword ptr es:[1000H]

;后,(cs)=0006,(ip)=00BE

 

;检测点9.2
;补全编程,利用jcxz指令,实现在内存2000H段中查找第一个值为0的字节,找到
;后,将它的偏移地址存储在DX中。
assume cs:code
code segment
start:
 mov ax,2000h
 mov ds,ax
 mov bx,0
s: 
 mov cl,ds:[bx]   ;置cl位BX的值
        mov ch, 0        ;置CX高位为0
        jcxz ok     ;如果CX为0就转移,如果不为0向下执行
 jmp short s
ok: mov dx,bx
 mov ax,4c00h
 int 21h
code ends
end start


;检测点9.3
;补全编程,利用loop指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它


;偏移地址存储在dx中
assume cs:code
code segment
start:
 mov ax,2000H
 mov ds,ax
 mov bx,0
s: mov cl,[bx]
 mov ch,0
 inc cx
 inc bx
 loop s
ok: dec bx     ;dec自减一
 mov dx,bx
 mov ax,4c00h
 int 21h
code ends
end start

 

;实验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]  ;把标号S2处的指令传送到AX寄存器
 mov cs:[di],ax ;把AX内容传送到标号S处
 
s0: jmp short s

s1: mov ax,0
 int 21h
 mov ax,0

s2: jmp short s1
 nop
 
codesg ends
end start


;实验九
assume cs:code,ds:data
data segment
  db 'W','e','l','c','o','m','e',' ','t','o',' ','m','a','s','m','!'
data ends
code segment
start:
  mov ax,data
  mov ds,ax
 
  mov ax,0b800h
  mov es,ax
  mov bx,071Ah
 
  mov bp,0
  mov cx,15
s:  mov al,ds:[bp]
  mov ah,2h
  mov es:[bx],ax
 
  mov al,ds:[bp]
  mov ah,24h
  mov es:[bx+160],ax
 
  mov al,ds:[bp]
  mov ah,71h
  mov es:[bx+320],ax
 
  add bx,2
  inc bp
  loop s

 

  mov ax,4c00h
  int 21h
code ends
end start

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值