实验任务:
1. 实现循环结构程序设计:数组累加求和以及排序程序设计;
data segment
n dw 5
sum dw ?
data ends
code segment
main proc far
assume cs:code,ds:data
start: push ds
mov ax,0
push ax
mov ax,data
mov ds,ax
mov ax,0
mov bx,0
mov cx,0
loop1:
inc bx
add ax,bx
inc cx
cmp ax,100
jbe loop1
mov n,cx
mov sum,ax
ret
main endp
code ends
end start
结果(这个不确定)
2. 实现子程序结构程序设计:实现数值转换,键盘输入十进制数,显示输出对应的十六进制数;
assume cs:code,ss:stack
stack segment
db 16 dup('?')
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,16
and bx,0
and dx,0
mov cx,5
read: ;读取
mov ah,01h
int 21h
cmp al,0dh ;判断是否键入回车符
jz do
cmp al,0ah
jz do
mov bl,al,
and bl,0fh ;将输入的十进制转化为二进制
mov ax,dx ;将转化后的二进制数存入ax
mov dx,0ah
mul dx ;结果乘10
add ax,bx
mov dx,ax ;将乘完10的结果继续保存在dx寄存器
loop read
do:
mov ax,dx
loopdo:
and dx,0
mov bx,10h
div bx ;对结果除10进行压栈
push dx
mov cx,ax
jcxz showenter
jmp loopdo
showenter:
mov dx,0ah
mov ah,02h
int 21h ;显示回车换行
mov dx,0dh
int 21h
show:
pop dx
cmp dx,9 ;显示输出
jbe abcdef
add dx,7h ;大于9的值要加ascii码37(abcdef)
abcdef:
add dx,30h
mov ah,02h
int 21h
cmp sp,16
jz exit
loop show
exit:
mov ax,4c00h
int 21h
code ends
end start
结果
3. 递归子程序设计:求N!。
data segment
buf dw 10 ;求10!
resu dw ? ;结果保存在resu中
data ends
code segment
assume cs:code, ds:data
start:
mov ax, data
mov ds, ax
mov ax, buf
call fact
mov resu, dx
mov ah, 4ch
int 21h
fact proc near
push ax
cmp ax, 0
ja next1
mov dx, 1
jmp next2
next1:
push ax
dec ax
call fact
pop ax
mul dl
mov dx, ax
next2:
pop ax
ret
fact endp
code ends
end start
结果