本人珍藏汇编子程序
来源:互联网 发布:荣威rx3 知乎 编辑:程序博客网 时间:2024/04/20 08:46
汇编实验终于考完了,感觉终不负辛苦的付出,汇编子程序实际编程中感觉作用挺大的,收集了一下这个学期以来积累的子程序贴出来,留作纪念。
希望前辈不吝赐教。
二进制形式输出,显示结果固定为十六位
;设(bx)=7fffh,则输出格式为0111111111111111b,后面的大字字母b表示二进制形式,显示结果固定为十六位。
;入口参数bx,出口参数bx
dispbxb proc near
mov cx,16
next1: rol bx,1
jc next
mov dl,30h
jmp outp
next:mov dl,31h
outp:mov ah,2
int 21h
loop next1
mov dl,'b' ;显示字母“b”
mov ah,2
int 21h
ret
dispbxb endp
mov cx,16
next1: rol bx,1
jc next
mov dl,30h
jmp outp
next:mov dl,31h
outp:mov ah,2
int 21h
loop next1
mov dl,'b' ;显示字母“b”
mov ah,2
int 21h
ret
dispbxb endp
; 按十进制形式输出一个字(不固定位输出,如255只输出255,不会输出0025)
; 按十进制形式输出一个字
;入口参数bx,出口参数bx
;通过2号中断输出
dispbxd proc near
mov si,10
xor cx,cx
mov ax,bx
next:mov dx,0
div si
push dx
inc cx
cmp ax,0 ;商为0则完成转换
jnz next
next2:pop dx
add dl,30h
mov ah,2
int 21h
loop next2
ret
dispbxd endp
mov si,10
xor cx,cx
mov ax,bx
next:mov dx,0
div si
push dx
inc cx
cmp ax,0 ;商为0则完成转换
jnz next
next2:pop dx
add dl,30h
mov ah,2
int 21h
loop next2
ret
dispbxd endp
; 按十六进制形式输出一个字,固定四位输出
;入口参数bx,出口参数bx
dispbxh proc near
mov cl,4
mov ch,4
next: rol bx,cl ;高低半个字节交换
mov al,bl
and al,0fh ;让al只保留借低位的值(bx的高位)
add al,30h
cmp al,3ah
jl next2
add al,07h ;是a~f,要多加7
next2:mov dl,al
mov ah,02h
int 21h
dec ch
cmp ch,0
ja next
mov dl,'h' ;显示字母“h”
mov ah,2
int 21h
ret
dispbxh endp
mov cl,4
mov ch,4
next: rol bx,cl ;高低半个字节交换
mov al,bl
and al,0fh ;让al只保留借低位的值(bx的高位)
add al,30h
cmp al,3ah
jl next2
add al,07h ;是a~f,要多加7
next2:mov dl,al
mov ah,02h
int 21h
dec ch
cmp ch,0
ja next
mov dl,'h' ;显示字母“h”
mov ah,2
int 21h
ret
dispbxh endp
Decibin proc near
;通过键盘输入一个数字字符串,可以多位,回车结束输入
;出口参数 BX表示输出的真值
Mov bx,0
Newchar:
Mov ah,1
Int 21h
Sub al,30h
Jl exit
Cmp al,9d
Jg exit
Cbw
Xchg ax,bx
Mov cx,10d
Mul cx
Xchg ax,bx
Add bx,ax
Jmp newchar
Exit:
Ret
Decibin endp
;模板
data segment ; 定义数据段
data ends
code segment ; 定义代码段
assume cs:code, ds:data
start:
mov ax, data
mov ds, ax
MOV AX, 4C00H
INT 21H
code ends
end start
;在数据段定义如下字符串传递参数
n dw ? ;存放元素个数
DataArray dw 80 dup(?),'$'
;冒泡法排序
f proc near
mov cx,n
dec cx ;cx=n-1, 为外层循环,并作为当前比较的最大下标
ag1: xor bx,bx ;bx作为内层循环的计数
lea si,DataArray
ag3: mov ax,[si]
cmp ax,[si+2]
jbe ag2
xchg ax,[si+2] ;[si]>[si+2]则交换
mov [si],ax
ag2: inc bx ;每比较一次bx增1
cmp bx,cx ;比较bx是否等于cx
je ag4
add si,2d ;bx比cx小则继续比较, si后移两个字节
jmp ag3 ;跳转到ag3, 比较下两个元素
ag4: loop ag1 ;跳转到ag1, 进行cx=cx-1层的循环
mov cx,n ;共输出n个元素
mov bx,10d
lea si,DataArray
;输出结果
ag5: mov ax,[si]
add si,2d ;将si指向下一个元素
xor di,di ;di为堆栈元素的计数,即一个数值十进制的位数
ag6: xor dx,dx
div bx
add dx,'0' ;得到余数对应的ASCII码
push dx ;压栈
inc di
cmp ax,0
jnz ag6 ;当商不为0时,继续求余数
mov ah,02h
ag7: pop dx ;出栈
int 21h
dec di ;di计数
cmp di,0
jnz ag7 ;输出字符数小于di时循环继续
mov dl,' '
int 21h ;每个元素相隔一个空格
loop ag5 ;输出下一个元素
ret
f endp
;判断是否为闰年子程序,是闰年则ax=1,否则ax=0
;ax 传入十进制年份
leap proc
;ax 传入十进制年份
leap proc
mov dx,0
mov bx,4
mov cx,ax
div bx
cmp dx,0
jnz end0
mov dx,0
mov ax,cx
mov bx,100
div bx
cmp dx,0
jnz end1
mov ax,cx
mov dx,0
mov bx,400
cmp dx,0
jz end1
end0: mov ax,0
jmp next
end1:mov ax,1
next:
ret
leap endp
mov bx,4
mov cx,ax
div bx
cmp dx,0
jnz end0
mov dx,0
mov ax,cx
mov bx,100
div bx
cmp dx,0
jnz end1
mov ax,cx
mov dx,0
mov bx,400
cmp dx,0
jz end1
end0: mov ax,0
jmp next
end1:mov ax,1
next:
ret
leap endp
- 本人珍藏汇编子程序
- X86汇编子程序设计
- 常用的 ARM 汇编子程序
- 汇编宏、子程序、选择排序
- 汇编学习-堆栈与子程序
- ARM汇编子程序参数传递
- 本人珍藏的最全的windows操作系统快捷键
- VC++的程序调用汇编的子程序
- 汇编原理4:分析init_flatrm子程序
- 汇编原理5:分析init_memory子程序
- 汇编屏幕显示3位数字子程序
- 编写无溢出除法的汇编子程序
- 编写无溢出除法的汇编子程序
- 8086汇编常用子程序集(未完)
- 汇编--子程序调用之输出回车
- 汇编-通过子程序交换两个内存变量
- 170412 汇编-显示字符串的子程序
- 汇编串操作和子程序设计
- 系出名门Android(3) - 对话框(Dialog)和通知(Notification)
- 系出名门Android(2) - 布局(Layout)和菜单(Menu)
- 系出名门Android(1) - 在 Windows 下搭建 Android 开发环境,以及 Hello World 程序
- ESBasic 可复用的.NET类库(20) -- TopN排行榜容器 TopNOrderedContainer
- ESBasic 可复用的.NET类库(19) -- 热缓存 IHotCache
- 本人珍藏汇编子程序
- 醉里挑灯看剑
- 我的C语言也很牛B啊!
- 王小波,《孔子》,傻大姐
- 面向对象 创建多个TABSTRIP
- 对于每个复杂的问题都会有一个简单但不准确的答案
- Google 作为新闻被炒作了一周,扫 yellow 不知道能持续多久
- 开始 2010
- 信息化管理——畜牧企业发展的必经之路