实验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]
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
程序可以正常返回,因为jmp short s1这条指令中s1为偏移,并非地址。所以当它被复制到s处时,依据偏移,正好可以跳转并执行
mov ax,4c00h
int 21h
在这里可以看见王爽老师的一片苦心呢!将跳转设置的如此巧妙,再次向王老师致敬!呵呵!
实验9
编程:在屏幕中间分别显示绿色,绿底红色,白底蓝色的字符串
‘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 ;显示缓冲区的基址
add ax, 078h ;在第十二行显示
mov es,ax
mov cx,16
mov bx,0
mov ah,02 ;绿色
mov bp,0
s: mov al,ds:[bx]
mov es:[bp],ax
inc bx
add bp,2
loop s
mov ah,00100100b ;绿底红字
mov bx,0
mov cx,16
s1: mov al,ds:[bx]
mov es:[bp],ax
inc bx
add bp,2
loop s1
mov ah,01110001b ;白底蓝字
mov bx,0
mov cx,16
s2: mov al,ds:[bx]
mov es:[bp],ax
inc bx
add bp,2
loop s2
mov ax,4c00h
int 21h
code ends
end start
这一次的实验任务算是比较轻松的,只要掌握一下如何控制显示的位置就行了,这个后面可能会用到!
补:
上面的那种方法是比较笨的,偷懒没有使用嵌套循环
下面我不偷懒的添上,呵呵!
源代码如下:
assume cs:code,ds:data
data segment
db 'welcome to masm!' ;待显示的字符串
db 02h,24h,71h ;显示的颜色设置,分别为绿色、绿底红字、白底蓝字
data ends
stack segment
db 16 dup (0)
stack ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,0b800h ;显示缓冲区的基址
add ax, 078h ;在第十二行显示
mov es,ax
mov ax,stack
mov ss,ax
mov sp,16
mov si,0
mov cx,3
mov bp,0 ;控制字符显示的列起始位置
s: mov ah,ds:16[si]
mov bx,0
push cx
mov cx,16
s1: mov al,ds:[bx]
mov es:[bp],ax
inc bx
add bp,2
loop s1
pop cx
inc si
loop s
mov ax,4c00h
int 21h
code ends
end start
- [游客] 支持博主! 06/06 19:21
- [idisblueflash] 太好了:)不过reg貌似不管用。 12/28 21:45
- [shuasus] 太谢谢了,好人啊 ! 12/28 15:52
- [qq729594750] 牛人 11/11 12:39
- [rongjian] 真的好想知道为什么这么做?为什么会是这样?真的诚心希望高手不吝赐教,指点方法 10/31 20:58
- [游客] 不错,我也要照这个来搞。 09/20 00:35
- [游客] 不错 09/18 09:28
- [bangbang_web] 加油哦 兄弟.. 05/01 17:29
- [jizha] 谢谢了,crazyman! 琐事缠身,今天才有时间到网上来看看! 03/13 12:20
- [crazyman] 一切都会过去的。 兄弟,俺比你惨。 02/03 14:36
- [jcw2008] 欢迎回到汇编网,祝你除夕快乐!Happy 牛 year! 01/25 12:58
- [jcw2008] 元旦快乐! 12/31 23:59
- [jcw2008] Merry Christmas! 12/25 01:18
- [游客] 加我的时候 请 输入数控二字 请大家多多帮忙 12/22 20:23
- [游客] 对于 你们所说的东西我是个文盲 我很想学 不过我自知不是这块料 我现在有一家小作坊 在生产一些 12/22 20:21
[ crazyman 发表于 2008-11-29 21:06 ]
第一题:博主理解的非常正确,连作者的用心都体会到了。
第二题:程序没有问题,不过,是不是应该分三行显示呢,那样有些定址逻辑稍稍有点变动。
不过,对博主来说那个好像不重要了,已经理解了知识点了。
[ justlikeit_361 发表于 2008-12-01 15:02 ]
恩,第二个分行好些