将内存单元中的x,y两个数交换一下
assume cs:code,ds:data
data segment
x dw 32
y dw 78
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,word ptr x
xchg ax,word ptr y
mov word ptr x,ax
mov ax,4c00h
int 21h
code ends
end start
给定一个数字n(0~9),输出n
assume cs:code,ds:data
data segment
n db 6
data ends
code segment
start:
mov ax,data
mov ds,ax
mov dl,30h
add dl,byte ptr n
mov ah,02h
int 21h
mov ax,4c00h
int 21h
code ends
end start
将一个字节数据以十六进制数形式显示
assume cs:code,ds:data
data segment
n db 3fh
ascll db '0','1','2','3','4','5','6','7','8','9'
db 'A','B','C','D','E','F'
data ends
code segment
start:
mov ax,data
mov ds,ax
mov bx,offset ascll
mov al,n
and al,0f0h
mov cl,4
shr al,cl
xlat
mov dl,al
mov ah,02h
int 21h
mov al,n
and al,0fh
xlat
mov dl,al
mov ah,02h
int 21h
mov dl,'H'
mov ah,02h
int 21h
mov ax,4c00h
int 21h
code ends
end start
求1+2+…+n,只允许使用跳转语句,不准使用loop
assume cs:code,ds:data
data segment
n dw 100
sum dw ?
data ends
code segment
start:
mov ax,data
mov ds,ax
mov cx,word ptr n
mov ax,0
again: add ax,cx
dec cx
cmp cx,0
ja again
mov word ptr sum,ax
mov ax,4c00h
int 21h
code ends
end start
计算n! ,不准使用loop
assume cs:code,ds:data
data segment
n dw 5
fac dw ?
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,1
mov cx,word ptr n
again: cmp cx,0
je next
mul cx
dec cx
jmp again
next: mov word ptr fac,ax
mov ax,4c00h
int 21h
code ends
end start
求分段函数,当x < 1 , y = 2x + 3,当x < 10,y = 3x + 7, 否则y = 5*x + 2
assume cs:code,ds:data
data segment
x dw 3
y dw ?
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,word ptr x
cmp ax,1
jl l1
cmp ax,10
jl l2
mov cl,2
shl ax,cl
add ax,word ptr x
add ax,2
jmp next
l1: shl ax,1
add ax,3
jmp next
l2: shl ax,1
add ax,word ptr x
add ax,7
next: mov word ptr y,ax
mov ax,4c00h
int 21h
code ends
end start
内存单元中的n存放一个小写字母,输出其大写形式
assume cs:code,ds:data
data segment
n db 'y'
data ends
code segment
start:
mov ax,data
mov ds,ax
mov dl , byte ptr n
sub dl,32
mov ah, 02h
int 21h
mov ax,4c00h
int 21h
code ends
end start
将一个三位数输出到屏幕上
assume cs:code,ds:data
data segment
n dw 285
data ends
code segment
start:
mov ax,data
mov ds,ax
mov cl,100
mov ax,word ptr n
div cl
mov dl,30h
add dl,al
mov ah,02h
int 21h
mov cl,10
mov ax,word ptr n
div cl
mov ah,0
div cl
mov dl,30h
add dl,ah
mov ah,02h
int 21h
mov cl,10
mov ax,word ptr n
div cl
mov dl,30h
add dl,ah
mov ah,02h
int 21h
mov ax,4c00h
int 21h
code ends
end start
输出一个十进制的数(三位数)
assume cs:code,ds:data,ss:stack
stack segment
s db 1024 dup(?)
stack ends
data segment
n dw 479
result dw ?
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
push word ptr n
call output
mov ax,4c00h
int 21h
output proc
push bp
mov bp,sp
push ax
push bx
push cx
push dx
mov cx,3
mov bx,10
mov ax,word ptr [bp+4]
l1: xor dx,dx
div bx
add dl,30h
push dx
loop l1
mov cx,3
l2:pop dx
mov ah,02h
int 21h
loop l2
pop dx
pop cx
pop bx
pop ax
pop bp
ret 2
output endp
code ends
end start
注意的是:xor dx ,dx一定不能省,不知道为什么没有这个,dosbox
会死机。
输出一个十进制的数
assume cs:code,ds:data,ss:stack
stack segment
s db 1024 dup(?)
stack ends
data segment
n dw 47932
result dw ?
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
push word ptr n
call output
mov ax,4c00h
int 21h
output proc
push bp
mov bp,sp
push ax
push bx
push dx
mov bx,-1
push bx
mov bx,10
mov ax,word ptr [bp+4]
l1: cmp ax,0
jz l2
xor dx,dx
div bx
add dl,30h
push dx
jmp l1
l2:pop dx
cmp dx,-1
jz done
mov ah,02h
int 21h
jmp l2
done:pop dx
pop bx
pop ax
pop bp
ret 2
output endp
code ends
end start
将一个字符串中的小写字母转变为大写字母并输出
assume cs:code,ds:data,ss:stack
stack segment
s db 1024 dup(?)
stack ends
data segment
string db 'hello,world!',0dh,0ah,'$'
data ends
code segment
start:
mov ax,data
mov ds,ax
mov si,offset string
again: cmp byte ptr[si],'$'
jz exit
cmp byte ptr[si],'z'
ja next
cmp byte ptr [si],'a'
jl next
sub byte ptr[si],20h
next: inc si
jmp again
exit: mov dx,offset string
mov ah,09h
int 21h
mov ax,4c00h
int 21h
code ends
end start
实现回车换行
print proc ;实现回车换行
push ax
push dx
mov dl,0dh
mov ah,02h
int 21h
mov dl,0ah
mov ah,02h
int 21h
pop dx
pop ax
ret
print endp
从键盘输入一个数,并输出
assume cs:code,ds:data,ss:stack
stack segment
s db 1024 dup(?)
stack ends
data segment
n dw ?
result dw ?
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
sub sp,2
call input
pop word ptr n
push word ptr n
call output
mov ax,4c00h
int 21h
input proc ;从键盘输入一个数,0~65535
push bp
mov bp,sp
push ax
push bx
push cx
mov bx,10
mov word ptr[bp+4],0
again:mov ah,01h
int 21h
cmp al,0dh
je next
xor cx,cx
add cl,al
sub cl,30h
mov ax,word ptr [bp+4]
mul bx
add ax,cx
mov word ptr[bp+4],ax
jmp again
next:pop cx
pop bx
pop ax
pop bp
ret
input endp
output proc ;将刚才输入的数输出到屏幕
push bp
mov bp,sp
push ax
push bx
push dx
mov bx,-1
push bx
mov bx,10
mov ax,word ptr [bp+4]
l1: cmp ax,0
jz l2
xor dx,dx
div bx
add dl,30h
push dx
jmp l1
l2:pop dx
cmp dx,-1
jz done
mov ah,02h
int 21h
jmp l2
done:pop dx
pop bx
pop ax
pop bp
ret 2
output endp
code ends
end start
可输出负数的子程序
output proc ;将数输出到屏幕
push bp
mov bp,sp
push ax
push bx
push dx
mov bx,-1
push bx
mov bx,10
mov ax,word ptr [bp+4]
add ax,0
jns l1
mov dl,45
mov ah,02h
int 21h
mov ax,word ptr [bp+4]
neg ax
l1: cmp ax,0
jz l2
xor dx,dx
div bx
add dl,30h
push dx
jmp l1
l2:pop dx
cmp dx,-1
jz done
mov ah,02h
int 21h
jmp l2
done:pop dx
pop bx
pop ax
pop bp
ret 2
output endp