检测点9·1
(1)程序如下:
assume cs:code
data segment
?
data ends
code segment
start:mov ax,data
mov ds,ax
mov bx,0
jmp word ptr[bx+1]
code ends
end start
若要使程序中的jmp指令执行后,CS:IP指向程序的第一条指令,在data段中应该定
义哪些数据?
assume cs:code
data segment
db 0
dw offset start
data ends
code segment
start:mov ax,data
mov ds,ax
mov bx,0
jmp word ptr[bx+1]
code ends
end start
(2)程序如下。
assume cs:code
data segment
dd 12345678H
data ends
code segment
start:mov ax,data
mov ds,ax
mov bx,0
mov bx,0
mov [bx],__
mov [bx+2],__
Jmp dword ptr ds:[0]
code ends
end start
补全程序,使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]
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)=00beh
检测点9·2
补全编程,利用jcxz指令,实现在内存2000H段中查找第一个值为0的字节,找到
后,将它的偏移地址存储在dx中。
assume cs:code
code segment
start:mov ax,2000H
mov ds,ax
mov bx,0
s:mov ch,0
mov cl,[bx]
jcxz ok
inc bx
jmp short s
ok:mov dx,bx
mov ax,4c00h
int 21h
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 bx
loop s
ok:dec bx
mov dx,bx
mov ax,4COOh
int 21h
code ends
end start
实验8分析 一个奇怪的程序
分析下面的程序,在运行前思考:这个程序可以正确返回吗?
运行后再思考:为什么是这种结果?
通过这个程序加深对相关内容的理解。
assume cs:codesg
codesg segment
mov ax,4c00h
int 21h
start:mov ax,O
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
可以正常返回,因为短跳转是通过8位位移来跳转的,程序先从start执行,然后把s2处的一条指令复制到s处,然后执行到s0处,通过位移量跳转到测试cs:0处,程序正常返回了。
实验9根据材料编程
这个编程任务必须在进行下面的课程之前独立完成,因为后面的课程中,需要通过这个实验而获得的编程经验。
编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串“welcome to
masm!”。
编程所需的知识通过阅读、分析下面的材料获得。
80*25彩色字符模式显示缓冲区(以下简称为显示缓冲区)的结构:
内存地址空间中,B8000H~BFFFFH共32KB的空间,为80×25彩色字符模式的显
示缓冲区。向这个地址空间写入数据,写入的内容将立即出现在显示器上。
在80*25彩色字符模式下,显示器可以显示25行,每行80个字符,每个字符可以有
256种属性(背景色、前景色、闪烁、高亮等组合信息)。
这样,一个字符在显示缓冲区中就要占两个字节,分别存放字符的ASCII码和属性。
80*25模式下,一屏的内容在显示缓冲区中共占4000个字节。
显示缓冲区分为8页,每页4KB(≈4000B),显示器可以显示任意一页的内容。一般
情况下,显示第0页的内容。也就是说通常情况下,B8000H~B8F9FH中的4000个字节
的内容将出现在显示器上。
在一页显示缓冲区中:
偏移00O一09F对应显示器上的第1行(80个字符占160个字节);
偏移0A0—13F对应显示器上的第2行;
偏移140—1DF对应显示器上的第3行;
依此类推,可知,偏移F00~F9f对应显示器上的第25行。
在一行中,一个字符占两个字节的存储空间(一个字),低位字节存储字符的ASCII
码,高位字节存储字符的属性。一行共有80个字符,占160个字节。
即在一行中:
OO—01单元对应显示器上的第1列;
02一03单元对应显示器上的第2列;
04一05单元对应显示器上的第3列;
依此类推,可知,9E~9F单元对应显示器上的第80列。
例:在显示器的0行0列显示黑低绿色的字符串’ABCDEF’
(“A”的ASCII码值为41H,02H表示黑底绿色)
显示缓冲区里的内容为:
OO 0l 02 03 04 05 06 07 08 09 OA OB
B800:0000 41 02 42 02 43 02 44 02 45 02 46 02
可以看出,在显示缓冲区中,偶地址存放字符,奇地址存放字符的颜色属性。
一个在屏幕上显示的字符,具有前景(字符色)和背景(底色)两种颜色,字符还可以以高亮度和闪烁的方式显示。前景色、背景色、闪烁、高亮等信息被记录在属性字节中。
属性字节的格式:
7 6 5 4 3 2 l 0
含义 bl r g B i r g b
闪烁 背景 高亮 前景
R:红色
G:绿色
B:蓝色
可以按位设置属性字节,从而配出各种不同的前景色和背景色。
比如:
红底绿字,属性字节为:01000010B;
红底闪烁绿字,属性字节为:11000010B;
红底高亮绿字,属性字节为:01001010B;
黑底白字,属性字节为:00000111B;
白底蓝字,属性字节为:01110001B。
例:在显示器的0行0列显示红底高亮闪烁绿色的字符串’ABCDEF’
(红底高亮闪烁绿色,属性字节为:11001010B,CAH)
显示缓冲区里的内容为:
00 01 02 03 04 05 06 07 08 09 OA OB…
B800:OOOO 41 CA 42 CA 43 CA 44 CA 45 CA 46 CA …
:
:
B800:00A0........................…
注意,闪烁的效果必须在全屏DOS方式下才能看到。
assume cs:code
data segment
db "Welcome to masm!"
data ends
code segment
start:mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov cx,16
xor bx,bx
mov di,160*11+64
s:mov dl,2
mov al,[bx]
mov es:[di],al
mov es:[di+1],dl
mov dl,24h
mov es:[di+160],al
mov es:[di+161],dl
mov dl,0f1h
mov es:[di+320],al
mov es:[di+321],dl
inc bx
inc di
inc di
loop s
mov ax,700h
int 21h
mov ax,4c00h
int 21h
code ends
end start
- [kanwangxue] 感觉楼主很乖的。有点孩子气。呵呵。 01/27 08:58
- [kanwangxue] it界,进去干嘛啊,到时候自己牛比了,首先写一个自己的语言,自己用。进入IT界不就是随波做流吗/?他 01/27 08:57
- [kanwangxue] 哥们,不要为了赚钱而学计算机。 计算机是年轻时候干的, 30岁后可以开始想赚钱,年轻嘛,不要这么悲 01/27 08:50
- [游客] 怎么说? 01/26 16:22
- [游客] 你这不行啊,差远了! 01/10 22:29
- [chinatree] 谢谢你。相信你也会成功的。 01/09 14:22
- [landyking] 哥们儿,好久不见。相信你会成功的。 12/02 23:34
- [chinatree] 哇哇,被挖坟了。莫生气,只是感觉谦虚些好,就算你的程序真的是史上最强的,也别说出来嘛,自己偷着乐就行 11/20 00:41
- [xiaoyao2012] 你的程序和我的程序比较也不见得你的程序又节约空间,在某种意义上说你的程序用了没学的指令,所以不见得你 11/19 15:39
- [heliang6291] 一起加油啊 07/02 02:45
- [游客] 急需一个汇编程序大作业。。。。。。。。。。。。。。。。。。。??? 12/28 16:50
- [游客] 这么多人喜欢你,我嫉妒了。但你不可以喜欢那么多,允许你在我不需要你的时候帮别人。如果我需要立叫立到。 11/13 13:11
- [tily] 兄弟 我来看你啦 呵呵 最近可好呀 09/26 22:17
- [stqcw] 能加我qq吗?1270911891 我在做课程设计2的时候 遇到点问题 09/24 09:16
- [stqcw] 能加我qq吗?1270911891 我的环境还是有点问题。按下A的时候不能显示满屏的A 09/20 09:36
- [stqcw] 牛人 我在xp里面运行王爽 汇编第二版 p280的例子 按下esc键没反应 呀 怎样在虚拟机里配置一 09/17 15:18
- [landyking] 呵呵,交个朋友,共同学习. 09/08 00:03
- [luyingdzx] 能知道你的QQ吗?或者请加一下我的QQ271190440,可以吗 虽然在论坛能获得解答,但是有的问 08/07 21:32