计算机原理实验室实验报告 mov cx,4 ; CX length-1 mov si,offset a ; DI string pointer call sort sort proc mov cx,5 lp2: mov ah,02h mov bl,0;计数器BL mov si,offset a mov si, di lp3: push cx mov dl,[si] lp1: int 21h mov al,[si] inc si cmp al,[si+2] INC SI jna j1 loop lp3 xchg al,[si+2] HLT mov [si],al A DW '5','7','1','9','2' inc bl ; si string pointer j1: ;cx length-1 inc si sort proc inc si lp2: loop lp1 mov di,si pop cx push cx cmp bl,0 mov dl,[di] loopnz lp2 lp1: ret inc di sort endp inc di cmp dl,[di] jna j1 xchg dl,[di] j1:loop lp1 pop cx mov [si],dl inc si inc si loop lp2 ret sort endp 四.实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等) 直接选择排序:
冒泡排序: 计算机原理实验室实验报告 直接排序出现的问题:在该排序中每次都将最小的放在了DL中。必须有MOV [SI],DL,不然将造成数据丢失,执行结果出现错误。 冒泡排序:初始内存中的数据为A DW '5','7','1','2','9' ,执行后,CX=1时提前退出。实现了快速排序。 思考内容:冒泡排序之所以能实现快速排序,是每一次排序都将最大或最小的放在最后或最前,并且有个来统计交换的次数,一旦交换的次数为0时直接退出循环。 五.结论: 完成了本次实验要求的实验内容。学会了实现内存数据访问,用两种方法实现对五个字从大到小排序。
实验四:子程序及中断实验
实验环境 PC机+Win 2003+emu8086+proteus仿真器 实验日期 一.实验内容 1.实现子程序和中断服务子程序的设计; 2.编写子程序设置40H中断为自定义中断服务子程序; 3.编写中断服务子程序实现AX=AX+BX; 4.编写主程序调用子程序和中断。
计算机原理实验室实验报告 二.理论分析或算法分析 定义数据段Data 执行主程序 将data放在dx,并保存到ds中,ax存es 取子程序的偏移放在ax 调用子程序和中断,实现:AX=AX+BX 结束
计算机原理实验室实验报告 三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等) 代码: data segment a dw 5fh b dw 3fh c dw '?' data ends code segment assume cs:code,ds:data start: mov dx,data mov ds,dx xor ax,ax mov es,ax mov ax,offset change mov word ptr es:[80h],ax mov ax,seg change mov word ptr es:[82h],ax int 20h jmp s change proc near xor ax,ax xor bx,bx mov ax,a mov bx,b add ax,bx mov c,ax iret change endp code ends s: end start