汇编语言实验报告

发布时间 : 星期六 文章汇编语言实验报告更新完毕开始阅读

实验八 转移指令的原理

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

联系合同范文客服:xxxxx#qq.com(#替换为@)