一、实习目的
掌握用汇编语言编写程序的思路和方法。
二、实习内容
从首地址为1000H开始存放10个数,要求设计程序将这些数由小到大排序,排序后的数仍放在原地址处。
三、代码
data segment count db 10; array db 12,34,56,21,234,54,45,58,96,14; msgOne db 'The source array number is:','$' msgTwo db 0ah,0dh,'The sorted array number is:','$' c10 db 10; data ends myStack segment stack db 100 dup(?) myStack ends code segment assume DS:data,CS:code start: mov ax,data; mov DS,ax; lea dx,msgOne; 输出排序前的数组 mov ah,09h; int 21h; mov ch,0; mov cl,count; mov bx,0; outPutSource: mov ah,0; mov al,array[bx]; call printNum; mov dl,' ' mov ah,02h; int 21h; inc bx; loop outPutSource lea si,array; 设置参数,调用排序函数 mov ch,0; mov cl,count; call mySort; lea dx,msgTwo; 输出排序后的数组 mov ah,09h; int 21h; mov ch,0; mov cl,count; mov bx,0; outPutSortedArray: mov ah,0; mov al,array[bx]; call printNum; mov dl,' ' mov ah,02h; int 21h; inc bx; loop outPutSortedArray mov ax,4c00h; int 21h; mySort proc; 数组排序,si中存放数组偏移地址,cx中存放数组元素个数 push ax; push cx; dec cx; mov ax,0; loopOne: push cx; push si; loopTwo: mov al,byte ptr[si]; cmp al,byte ptr[si + 1]; jbe next; xchg al,[si + 1]; xchg al,[si]; next: inc si; loop loopTwo pop si; pop cx; loop loopOne pop cx; pop ax; ret printNum proc; 将al中存放的数字以十进制形式输出 push ax; push dx; push cx; mov cx,0; tranToChar: mov ah,0; cmp al,0; jz outTranToChar; div c10; mov dl,ah; mov dh,0; push dx; inc cx; jmp tranToChar; outTranToChar: cmp cx,0; jz exit_printNum print: pop dx; add dx,30h; mov ah,02h; int 21h; loop print exit_printNum: pop cx; pop dx; pop ax; ret; code ends end start
四、运行结果
时间: 2024-10-08 22:14:46