汇编语言--王爽--实验9 子程序
2014-09-12 23:02
246 查看
今天对于这个程序,研究了一下午。其他高级语言在调用函数时候都是系统帮助暂存主调函数的信息,汇编则把这些实现描述出来了。
assume cs:code
data segment
db 'welcome to masm!',0
data ends
code segment
start: mov dh,8
mov dl,3
mov cl,2
mov ax,data
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str:
push dx
push cx
push ax
push si
push ds
mov ax,0b800h ;显存地址从b800开始
mov es,ax
dec dh ;0~7 第八行则减去1
mov ah,0
mov al,160 ;一行80个字符加上80个属性数据
mul dh
mov bx ,ax
dec dl ;第三列则减去1
mov ah,0
mov al,2 ;每一列两个字节
mul dl
add bx,ax
mov al,cl
x:
mov ch,0
mov cl,ds:[si]
jcxz ok
mov es:[bx],cl
mov cl,al
mov es:[bx+1],cl
add bx,2
inc si
jmp x
ok:
pop ds
pop si
pop ax
pop cx
pop dx
ret
code ends
end start
当程序运行到call,进入子程序后,先将主程序的所有寄存器先保存起来(其实对于这个程序不保存也可以运行),保存的目的是:因为寄存器都是有限的,如果子程序中用到主程序中的数据,可以保证主程序中的数据不被改变
assume cs:code
data segment
db 'welcome to masm!',0
data ends
code segment
start: mov dh,8
mov dl,3
mov cl,2
mov ax,data
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str:
push dx
push cx
push ax
push si
push ds
mov ax,0b800h ;显存地址从b800开始
mov es,ax
dec dh ;0~7 第八行则减去1
mov ah,0
mov al,160 ;一行80个字符加上80个属性数据
mul dh
mov bx ,ax
dec dl ;第三列则减去1
mov ah,0
mov al,2 ;每一列两个字节
mul dl
add bx,ax
mov al,cl
x:
mov ch,0
mov cl,ds:[si]
jcxz ok
mov es:[bx],cl
mov cl,al
mov es:[bx+1],cl
add bx,2
inc si
jmp x
ok:
pop ds
pop si
pop ax
pop cx
pop dx
ret
code ends
end start
当程序运行到call,进入子程序后,先将主程序的所有寄存器先保存起来(其实对于这个程序不保存也可以运行),保存的目的是:因为寄存器都是有限的,如果子程序中用到主程序中的数据,可以保证主程序中的数据不被改变
相关文章推荐
- 汇编语言(王爽)--实验10编写子程序
- 2.解决除法溢出问题-汇编语言(王爽)-实验10 编写子程序
- 王爽 汇编语言 第三版 实验10 编写子程序
- 3.数值显示-汇编语言(王爽)-实验10 编写子程序
- 汇编语言 第三版 王爽 实验10-2 编写子程序 之 解决除法溢出问题 divdw
- 王爽 汇编语言 实验十 汇编子程序设计
- 汇编语言(王爽)实验十 编写子程序
- 汇编语言(王爽)--实验11 编写子程序
- 汇编语言 第三版 王爽 实验10-1 编写子程序 之 显示字符串
- 汇编语言(王爽 第三版)实验十一
- 王爽汇编语言实验9 自己独立完成
- 王爽 汇编语言第二版 实验8 代码详细分析
- 汇编语言(王爽)-实验11
- 【汇编语言】王爽第三版----------------实验10-3
- 汇编语言 第三版 王爽 实验6 更改大写字母
- 汇编语言 第三版 王爽 实验7 寻址方式在结构化数据访问中的应用
- 王爽汇编语言笔记——实验七
- 王爽 汇编 实验16 编写包含多个功能子程序的中断例程
- 汇编语言(王爽)--实验十一
- 王爽汇编语言 实验12