目录
一、基本框架
1.1 具有换行函数
二、函数
2.1 输出单个正数(ax的范围)(不支持负数)
2.2 输入单个正数 【0-99】(不支持负数)
2.3 降序冒泡排序,只处理(db)数据
2.4 输出数组数据(空格分隔)
2.5 换行函数(masm)
2.6 输出字符串
2.7 换行函数(emu8086)
一、基本框架
1.1 具有换行函数
assume cs:code,ds:data
data segment ;数段段(存放自定义数据的地方)
data ends
code segment ;代码段(自定义代码的地方)
start:
mov ax,data
mov ds,ax
;------------------------------------------------- 核心代码编辑开始
;------------------------------------------------- 核心代码编辑结束
call nextLine
jmp finish
;----------------------------------------------------- 函数存放开始
nextLine proc ;无需在外部环境设置参数,这个函数用来换行
push ax
push dx
mov dl,10
mov ah,2
int 21h
pop dx
pop ax
ret
nextLine endp
;----------------------------------------------------- 函数存放结束
finish:
mov ax,4c00h
int 21h
code ends
end start
二、函数
2.1 输出单个正数(ax的范围)(不支持负数)
printNumber proc
;函数作用:输出ax的值到屏幕上
;函数参数:在call printNumber之前,设置好ax的值
push ax
push bx
push cx
push dx
push di
push si
mov dx,0
mov cx,0
mov bx,10
P0:
div bx
add dx,'0'
push dx
mov dx,0
inc cx
cmp ax,0
je P1
jmp P0
P1:
P2:
pop dx
mov ah,2
int 21h
loop P2
pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
printNumber endp
2.2 输入单个正数 【0-99】(不支持负数)
inputNumber proc
;函数作用:输入 NumberLength 个范围为[0,99]的正数,将其保存到 NumberStore 中。
;例如 :04,99,25
;函数参数设置:在数据段中定义如下两条语句(默认为10个元素)
NumberStore db 10 dup(0)
NumberLength dw 10
push ax
push bx
push cx
push dx
push di
push si
lea bx,NumberStore
mov si,0
mov cx,NumberLength
I0:
mov ah,1
int 21h
sub al,'0'
mov ah,0
mov dl,10
mul dl
mov [bx+si],al
mov ah,1
int 21h
sub al,'0'
add [bx+si],al
inc si
mov dl,' '
mov ah,2
int 21h
loop I0
pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
inputNumber endp
2.3 降序冒泡排序,只处理(db)数据
sortByDescending proc
;函数作用:降序的冒泡排序
;函数参数设置:在数据段中定义如下两条语句(默认为10个元素)
NumberStore db 10 dup(0)
NumberLength dw 10
;函数调用后,NumberStore 的数据有序且降序。
;NumberStore 的单个数据范围为 db
push ax
push bx
push cx
push dx
push di
push si
mov di,NumberLength
dec di
LP1:
mov cx,di
mov bx,0
LP2:
mov al,NumberStore[bx]
cmp al,NumberStore[bx+1]
jae CONT
xchg al,NumberStore[bx+1]
mov NumberStore[bx],al
CONT:
inc bx
loop LP2
dec di
jnz LP1
pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
sortByDescending endp
2.4 输出数组数据(空格分隔)
printArray proc
;函数作用:输出数组(即输出连续的数据)到屏幕上
;函数参数设置:在数据段中定义如下两条语句(默认为10个元素)
NumberStore db 10 dup(0)
NumberLength dw 10
;NumberStore 的单个数据范围为 db
push ax
push bx
push cx
push dx
push di
push si
;输出 db 数组
mov cx,NumberLength
mov si,0
A0:
xor ax,ax
mov al,NumberStore[si]
call printNumber
mov dl,' '
mov ah,2
int 21h
inc si
loop A0
;输出 dw 数组
;mov cx,NumberLength
;mov si,0
;A0:
;mov ax,NumberStore[si]
;call printNumber
;mov dl,' '
;mov ah,2
;int 21h
;add si,2
;loop A0
pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
printArray endp
2.5 换行函数(masm)
nextLine proc
;换行,直接调用就行
push ax
push dx
mov dl,10
mov ah,2
int 21h
pop dx
pop ax
ret
nextLine endp
2.6 输出字符串
outptString proc
;在call outptString之前,设置好dx的值。
;比如:
;在数据段中定义 MESSAGE db "123$"
;在代码段中定义
; lea dx,MESSAGE
; call outptString
;一定要加$,不然会出现一堆乱码,原因是$标志着字符串结束。
;如果没有末尾没有加$,程序会一直输出字符直到遇到$结束。
;类比一下C语言。输出没有加/0的字符数组,程序有可能会出现乱码。
push ax
mov ah,9
int 21h
pop ax
ret
outptString endp
2.7 换行函数(emu8086)
nextLine proc ;无需在外部环境设置参数,这个函数用来换行
push ax
push dx
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
pop dx
pop ax
ret
nextLine endp
assume cs:code,ds:data
data segment ;数段段(存放自定义数据的地方)
data ends
code segment ;代码段(自定义代码的地方)
start:
mov ax,data
mov ds,ax
;------------------------------------------------- 核心代码编辑开始
;------------------------------------------------- 核心代码编辑结束
call nextLine
jmp finish
;----------------------------------------------------- 函数存放开始
nextLine proc ;无需在外部环境设置参数,这个函数用来换行
push ax
push dx
mov dl,10
mov ah,2
int 21h
pop dx
pop ax
ret
nextLine endp
;----------------------------------------------------- 函数存放结束
finish:
mov ax,4c00h
int 21h
code ends
end start
二、函数
2.1 输出单个正数(ax的范围)(不支持负数)
printNumber proc
;函数作用:输出ax的值到屏幕上
;函数参数:在call printNumber之前,设置好ax的值
push ax
push bx
push cx
push dx
push di
push si
mov dx,0
mov cx,0
mov bx,10
P0:
div bx
add dx,'0'
push dx
mov dx,0
inc cx
cmp ax,0
je P1
jmp P0
P1:
P2:
pop dx
mov ah,2
int 21h
loop P2
pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
printNumber endp
2.2 输入单个正数 【0-99】(不支持负数)
inputNumber proc
;函数作用:输入 NumberLength 个范围为[0,99]的正数,将其保存到 NumberStore 中。
;例如 :04,99,25
;函数参数设置:在数据段中定义如下两条语句(默认为10个元素)
NumberStore db 10 dup(0)
NumberLength dw 10
push ax
push bx
push cx
push dx
push di
push si
lea bx,NumberStore
mov si,0
mov cx,NumberLength
I0:
mov ah,1
int 21h
sub al,'0'
mov ah,0
mov dl,10
mul dl
mov [bx+si],al
mov ah,1
int 21h
sub al,'0'
add [bx+si],al
inc si
mov dl,' '
mov ah,2
int 21h
loop I0
pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
inputNumber endp
2.3 降序冒泡排序,只处理(db)数据
sortByDescending proc
;函数作用:降序的冒泡排序
;函数参数设置:在数据段中定义如下两条语句(默认为10个元素)
NumberStore db 10 dup(0)
NumberLength dw 10
;函数调用后,NumberStore 的数据有序且降序。
;NumberStore 的单个数据范围为 db
push ax
push bx
push cx
push dx
push di
push si
mov di,NumberLength
dec di
LP1:
mov cx,di
mov bx,0
LP2:
mov al,NumberStore[bx]
cmp al,NumberStore[bx+1]
jae CONT
xchg al,NumberStore[bx+1]
mov NumberStore[bx],al
CONT:
inc bx
loop LP2
dec di
jnz LP1
pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
sortByDescending endp
2.4 输出数组数据(空格分隔)
printArray proc
;函数作用:输出数组(即输出连续的数据)到屏幕上
;函数参数设置:在数据段中定义如下两条语句(默认为10个元素)
NumberStore db 10 dup(0)
NumberLength dw 10
;NumberStore 的单个数据范围为 db
push ax
push bx
push cx
push dx
push di
push si
;输出 db 数组
mov cx,NumberLength
mov si,0
A0:
xor ax,ax
mov al,NumberStore[si]
call printNumber
mov dl,' '
mov ah,2
int 21h
inc si
loop A0
;输出 dw 数组
;mov cx,NumberLength
;mov si,0
;A0:
;mov ax,NumberStore[si]
;call printNumber
;mov dl,' '
;mov ah,2
;int 21h
;add si,2
;loop A0
pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
printArray endp
2.5 换行函数(masm)
nextLine proc
;换行,直接调用就行
push ax
push dx
mov dl,10
mov ah,2
int 21h
pop dx
pop ax
ret
nextLine endp
2.6 输出字符串
outptString proc
;在call outptString之前,设置好dx的值。
;比如:
;在数据段中定义 MESSAGE db "123$"
;在代码段中定义
; lea dx,MESSAGE
; call outptString
;一定要加$,不然会出现一堆乱码,原因是$标志着字符串结束。
;如果没有末尾没有加$,程序会一直输出字符直到遇到$结束。
;类比一下C语言。输出没有加/0的字符数组,程序有可能会出现乱码。
push ax
mov ah,9
int 21h
pop ax
ret
outptString endp
2.7 换行函数(emu8086)
nextLine proc ;无需在外部环境设置参数,这个函数用来换行
push ax
push dx
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
pop dx
pop ax
ret
nextLine endp
printNumber proc
;函数作用:输出ax的值到屏幕上
;函数参数:在call printNumber之前,设置好ax的值
push ax
push bx
push cx
push dx
push di
push si
mov dx,0
mov cx,0
mov bx,10
P0:
div bx
add dx,'0'
push dx
mov dx,0
inc cx
cmp ax,0
je P1
jmp P0
P1:
P2:
pop dx
mov ah,2
int 21h
loop P2
pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
printNumber endp
2.2 输入单个正数 【0-99】(不支持负数)
inputNumber proc
;函数作用:输入 NumberLength 个范围为[0,99]的正数,将其保存到 NumberStore 中。
;例如 :04,99,25
;函数参数设置:在数据段中定义如下两条语句(默认为10个元素)
NumberStore db 10 dup(0)
NumberLength dw 10
push ax
push bx
push cx
push dx
push di
push si
lea bx,NumberStore
mov si,0
mov cx,NumberLength
I0:
mov ah,1
int 21h
sub al,'0'
mov ah,0
mov dl,10
mul dl
mov [bx+si],al
mov ah,1
int 21h
sub al,'0'
add [bx+si],al
inc si
mov dl,' '
mov ah,2
int 21h
loop I0
pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
inputNumber endp
2.3 降序冒泡排序,只处理(db)数据
sortByDescending proc
;函数作用:降序的冒泡排序
;函数参数设置:在数据段中定义如下两条语句(默认为10个元素)
NumberStore db 10 dup(0)
NumberLength dw 10
;函数调用后,NumberStore 的数据有序且降序。
;NumberStore 的单个数据范围为 db
push ax
push bx
push cx
push dx
push di
push si
mov di,NumberLength
dec di
LP1:
mov cx,di
mov bx,0
LP2:
mov al,NumberStore[bx]
cmp al,NumberStore[bx+1]
jae CONT
xchg al,NumberStore[bx+1]
mov NumberStore[bx],al
CONT:
inc bx
loop LP2
dec di
jnz LP1
pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
sortByDescending endp
2.4 输出数组数据(空格分隔)
printArray proc
;函数作用:输出数组(即输出连续的数据)到屏幕上
;函数参数设置:在数据段中定义如下两条语句(默认为10个元素)
NumberStore db 10 dup(0)
NumberLength dw 10
;NumberStore 的单个数据范围为 db
push ax
push bx
push cx
push dx
push di
push si
;输出 db 数组
mov cx,NumberLength
mov si,0
A0:
xor ax,ax
mov al,NumberStore[si]
call printNumber
mov dl,' '
mov ah,2
int 21h
inc si
loop A0
;输出 dw 数组
;mov cx,NumberLength
;mov si,0
;A0:
;mov ax,NumberStore[si]
;call printNumber
;mov dl,' '
;mov ah,2
;int 21h
;add si,2
;loop A0
pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
printArray endp
2.5 换行函数(masm)
nextLine proc
;换行,直接调用就行
push ax
push dx
mov dl,10
mov ah,2
int 21h
pop dx
pop ax
ret
nextLine endp
2.6 输出字符串
outptString proc
;在call outptString之前,设置好dx的值。
;比如:
;在数据段中定义 MESSAGE db "123$"
;在代码段中定义
; lea dx,MESSAGE
; call outptString
;一定要加$,不然会出现一堆乱码,原因是$标志着字符串结束。
;如果没有末尾没有加$,程序会一直输出字符直到遇到$结束。
;类比一下C语言。输出没有加/0的字符数组,程序有可能会出现乱码。
push ax
mov ah,9
int 21h
pop ax
ret
outptString endp
2.7 换行函数(emu8086)
nextLine proc ;无需在外部环境设置参数,这个函数用来换行
push ax
push dx
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
pop dx
pop ax
ret
nextLine endp
sortByDescending proc
;函数作用:降序的冒泡排序
;函数参数设置:在数据段中定义如下两条语句(默认为10个元素)
NumberStore db 10 dup(0)
NumberLength dw 10
;函数调用后,NumberStore 的数据有序且降序。
;NumberStore 的单个数据范围为 db
push ax
push bx
push cx
push dx
push di
push si
mov di,NumberLength
dec di
LP1:
mov cx,di
mov bx,0
LP2:
mov al,NumberStore[bx]
cmp al,NumberStore[bx+1]
jae CONT
xchg al,NumberStore[bx+1]
mov NumberStore[bx],al
CONT:
inc bx
loop LP2
dec di
jnz LP1
pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
sortByDescending endp
2.4 输出数组数据(空格分隔)
printArray proc
;函数作用:输出数组(即输出连续的数据)到屏幕上
;函数参数设置:在数据段中定义如下两条语句(默认为10个元素)
NumberStore db 10 dup(0)
NumberLength dw 10
;NumberStore 的单个数据范围为 db
push ax
push bx
push cx
push dx
push di
push si
;输出 db 数组
mov cx,NumberLength
mov si,0
A0:
xor ax,ax
mov al,NumberStore[si]
call printNumber
mov dl,' '
mov ah,2
int 21h
inc si
loop A0
;输出 dw 数组
;mov cx,NumberLength
;mov si,0
;A0:
;mov ax,NumberStore[si]
;call printNumber
;mov dl,' '
;mov ah,2
;int 21h
;add si,2
;loop A0
pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
printArray endp
2.5 换行函数(masm)
nextLine proc
;换行,直接调用就行
push ax
push dx
mov dl,10
mov ah,2
int 21h
pop dx
pop ax
ret
nextLine endp
2.6 输出字符串
outptString proc
;在call outptString之前,设置好dx的值。
;比如:
;在数据段中定义 MESSAGE db "123$"
;在代码段中定义
; lea dx,MESSAGE
; call outptString
;一定要加$,不然会出现一堆乱码,原因是$标志着字符串结束。
;如果没有末尾没有加$,程序会一直输出字符直到遇到$结束。
;类比一下C语言。输出没有加/0的字符数组,程序有可能会出现乱码。
push ax
mov ah,9
int 21h
pop ax
ret
outptString endp
2.7 换行函数(emu8086)
nextLine proc ;无需在外部环境设置参数,这个函数用来换行
push ax
push dx
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
pop dx
pop ax
ret
nextLine endp
nextLine proc
;换行,直接调用就行
push ax
push dx
mov dl,10
mov ah,2
int 21h
pop dx
pop ax
ret
nextLine endp
2.6 输出字符串
outptString proc
;在call outptString之前,设置好dx的值。
;比如:
;在数据段中定义 MESSAGE db "123$"
;在代码段中定义
; lea dx,MESSAGE
; call outptString
;一定要加$,不然会出现一堆乱码,原因是$标志着字符串结束。
;如果没有末尾没有加$,程序会一直输出字符直到遇到$结束。
;类比一下C语言。输出没有加/0的字符数组,程序有可能会出现乱码。
push ax
mov ah,9
int 21h
pop ax
ret
outptString endp
2.7 换行函数(emu8086)
nextLine proc ;无需在外部环境设置参数,这个函数用来换行
push ax
push dx
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
pop dx
pop ax
ret
nextLine endp
nextLine proc ;无需在外部环境设置参数,这个函数用来换行
push ax
push dx
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
pop dx
pop ax
ret
nextLine endp


