当前位置:首页 > 汇编语言实验报告
实验八 转移指令的原理
1. 分析下面的程序,在运行前思考:这个程序可以正确返回吗? 运行后再思考:为什么是这种结果?
assume cs:codesg
codesg segment
mov ax,4c00h int 21h
start: mov ax,0 ;将ax置0
s: nop ;占一字节,机器码90
nop ;占一字节,机器码90 mov di,offset s ;(di) = s的偏移地址 mov si,offset s2 ;(si) = s2偏移地址
mov ax,cs:[si] ;(ax) = jmp short s1指令对应的机器码EBF6 mov cs:[di],ax ;jmp short s1 覆盖s处两条nop指令
s0: jmp short s ;转移到已经被修改过的s处,执行jmp short s1,由此可 s1: mov ax,0 ;分析得已经返回至mov ax,4c00h处 int 21h mov ax,0 s2: jmp short s1 nop
codesg ends end start
当指令执行到s0:jmp short s时,该指令得到执行,编译器算出的ip位移量为-16(补码F0),(ip)=(ip)+位移量=18H+(-16)=8,cs:8指向s;
当指令执行到s标段jmp命令时,第1个字节中的机器码为EBF6,编译器算出的ip位移量为-10(补码F6),(ip)=(ip)+位移量=AH+(-10)=0,cs:0指向第一条指令。
实验9 根据材料编程
根据相关材料编程:材料详见书上188页
编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串 ’welcome to masm!’
assume cs:code,ds:data
data segment
db 'welcome to masm!'
data ends
code segment
start:mov ax,data mov ds,ax mov ax,0b800h mov es,ax mov bx,0 mov si,0 mov cx,16
s0: mov ax,[bx]
mov es:[bx+si+720h],ax mov es:[bx+si+721h],02h inc bx inc si loop s0
mov bx,0 mov cx,16 mov si,160 s1: mov ax,[bx]
mov es:[bx+si+720h],ax mov es:[bx+si+721h],24h inc bx inc si loop s1
mov bx,0 mov cx,16 mov si,320
s2: mov ax,[bx]
mov es:[bx+si+720h],ax mov es:[bx+si+721h],71h inc bx inc si loop s2
mov ax,4c00h int 21h
code ends end start
共分享92篇相关文档