实验一 分支程序设计
实验要求:
统计有符号字节数组中负数和非负数的个数
实验代码
org 100h .MODEL TINY .STACK 100 .DATA arr db -10,0,127,-128,63,67,8,-16,1,2 negcnt db 0 poscnt db 0 .CODE start: mov ax,@data mov ds,ax mov es,ax mov cx,10 ;数组长度为10 lea bx,arr ;bx指向arr mov negcnt,0 ;负数0个 mov poscnt,0 ;非负数0个 mov dx,0 loopst: cmp cx,0 jle loopend cmp dx,[bx] ;比较0和bx指向的数大小 jg label2 inc poscnt ;非负数计数 jmp exit label2: inc negcnt ;负数计数 exit: dec cx inc bx jmp loopst loopend:jmp $ end start ret
实验二 循环程序设计
实验要求
采用冒泡排序法对长度为20的字数据进行递增排序。
实验代码
org 100h .MODEL TINY .STACK 100 .DATA arr dw -128,127,-1,0,1,129,-129,32767,-32768,32766,-32767,1,0,1024,-1023,16384,45,-46,-5,6 len equ 20 .CODE start: mov ax,@data mov ds,ax mov es,ax mov cx,len-1 loop1: push cx mov bx,offset arr loop2: mov dx,[bx] cmp dx,[bx+2] jle next xchg dx,[bx+2] xchg dx,[bx] next: inc bx inc bx loop loop2 pop cx loop loop1 mov ax,4C00H jmp $ end start ret
实验三 子程序设计
实验要求:
选从键盘输入一个无符号整数,判断其是否是素数并在显示器上显示相关提示信息。判断一个数是否为素数的功能用子程序实现。
org 100h .MODEL TINY .STACK 100 .DATA msg1 db 'the number is a prime',0dh,0ah,'$' msg2 db 'the number is not a prime',0dh,0ah,'$' innum dw 0 indig db 0 divnum db 0 ten db 10 res db 0 .CODE start: mov ax,@data mov ds,ax mov es,ax call input1;//输入 call isp ;//判断是否为素数 mov ah,09h cmp res,0;//不是素数 je exit3 mov dx,offset msg1;//是素数 int 21h jmp exit4 exit3: mov dx,offset msg2;//不是素数,输出 int 21h exit4: jmp $ input1 proc near mov ax,0h mov innum,0h;//存储完整的输入数据 label1: mov ah,01h mov al,02h int 21h cmp al,'0' jl exit cmp al,'9' jg exit;//检测到了不是数字,说明数据输入完毕 sub al,'0' mov indig,al;//indig表示当前数字的个位 mov ax,innum;//之前输入过的数据innum*10后加当前个位,拼接得到当前数字 mul ten mov innum,ax mov al,indig cbw add innum,ax;//拼接完成 jmp label1;//输入下一位数字 exit: ret input1 endp isp proc near mov ax,innum cmp ax,2 jb exit0 ;//0和1不是素数 je exit1;//2是素数 mov divnum,2 ;//除数一开始为2 mov cx,innum sub cx,1;//cx为输入数字-1,为循环最大值 loop1: push ax div divnum;//ax/divnum cmp ah,0;//余数为0,是合数 jz exit0 inc divnum cmp divnum,cx pop ax jb loop1 jge exit1;//2~n-1的数都试过了,还除不尽,是素数 exit1: mov res,1 exit0: ret isp endp end start end