用汇编语言设计一个小程序

用汇编语言设计一个小程序在数据段的变量BUF中有10个字节型无符号的十进制数,它们以无序的方式存放着,设计一个程序将这些数据按由小到大的方式排列起来,并在屏幕上输出排好序的这10个数。(两数之间用空格分隔)

        CODE  SEGMENT
              ASSUME    CS:CODE

         BUF  DB        12H,34H,07H,78H,65H,41H,99H,87H,66H,52H
           N  EQU       $-BUF

      START:  PUSH      CS
              POP       DS
              PUSH      CS
              POP       ES
              LEA       SI,BUF
              MOV       CX,N
              CALL      SORT
              LEA       SI,BUF
              MOV       CX,N
              CALL      DSPBCD
              MOV       AH,4CH
              INT       21H
;===============================
     DSPBCD:
              PUSH      AX
              PUSH      CX
              PUSH      DX
              PUSH      SI
              CLD
      @BCD1:
              LODSB
              ROR       AL,4
              PUSH      AX
              MOV       DL,AL
              AND       DL,0FH
              OR        DL,30H
              MOV       AH,2
              INT       21H
              POP       AX
              ROR       AL,4
              MOV       DL,AL
              AND       DL,0FH
              OR        DL,30H
              MOV       AH,2
              INT       21H
              MOV       DL,'H'
              INT       21H
              MOV       DL,32
              INT       21H
              MOV       DL,32
              INT       21H
              LOOP      @BCD1
              POP       SI
              POP       DX
              POP       CX
              POP       AX
              RET
              
;===============================
; 单个字符串(或者字节数组)内部的排序(冒泡排序)
        SORT  PROC      NEAR
      ; 串长度置入cx,串首地址置入 si
              PUSH      AX
              PUSH      CX
              PUSH      DX
              PUSH      SI
              PUSH      DI
              PUSHF
              PUSH      CX
              POP       DX
              DEC       DX
    @SORTL1:
              MOV       CX,DX
              MOV       DI,SI
    @SORTL2:
              MOV       AL,[DI+1]
              CMP       AL,[DI]
              JA        @SORTNEXT   ; 无符号 升序
              XCHG      AL,[DI]
              MOV       [DI+1],AL
  @SORTNEXT:
              INC       DI
              LOOP      @SORTL2
              DEC       DX
              JNZ       @SORTL1
              POPF
              POP       DI
              POP       SI
              POP       DX
              POP       CX
              POP       AX
              RET
        SORT  ENDP
;===============================================================  
        CODE  ENDS
              END       START

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-06-16
就不告诉你

找一个单片机汇编语言编写的延时1ms的子程序
具体来看,TIME1MS子程序首先将寄存器R6赋值为2,然后进入一个循环。在循环内部,R7被赋值为248,接着通过DJNZ指令实现对R7的循环递减。当R7递减为0时,程序将跳出循环,继续执行后续代码。紧接着,再次利用DJNZ指令对R6进行操作,使得整个小周期为500微秒。通过这样的设计,整个子程序运行两周,即实现0....

用汇编语言编写一个小小程序
这个还不简单#include<stdio.h>void main(){ float a,b,c,s;\/*定义数据类型,数据初始化*\/s=(a*b+c)\/a;\/*计算并把计算结果赋值给s*\/printf("s=%f\\n",s);\/*输出计算结果*\/}

汇编窗口小程序
在程序设计中,回调函数是一种重要的机制,用于实现动态的函数调用。在汇编语言中,调用和传递参数的方式与高级语言有所不同。在 Windows 环境下,我们使用汇编语言开发窗口小程序时,会经常用到回调函数。例如,在 wc 窗口类中设置回调函数 WndProc 通过如下代码实现:mov wc.lpfnWndProc, OFFSET WndPro...

用汇编语言编写完成下列功能的小程序段。
1、OR AL,00110000B 或者OR AL,0C0H 2、MOV AL,ES:[COUNT]MOV AH,0 PUSH AX 3、TEST AL,03H JZ ZERO 4、定义宏指令MOVE,使它能将N个字符从一个字符区传送到另一个字符区。MOVE MACRO MOV CX,N LEA SI,SRC LEA DI,DST CLD REP MOVSB ENDM ...

单片机汇编语言,求给这个很短程序写一下注释
INC R0 ;计数器R0+1 MOV 2AH,@R0 ;将21H的内容送到2AH单元 CLR C ;清除标志位 SUBB A,@R0 ;将21H单元的内容与A中的相减结果放在A中 JC NEXT ;判断是否有借位!有则跳转至NEXT;MOV @R0,2BH DEC R0 MOV @R0,2AH INC R0 SETB 00H NEXT...

找一个单片机汇编语言编写的延时1ms的子程序
多简单的小程序呀:TIME1MS:MOV R6, #2 TIME1:;延时498uS MOV R7, #248 DJNZ R7, $ ;R7的为0时,程序向下运行,否则继续减 ;DJNZ R6, TIME1 ;加上此命令后,每个小周期时间为500uS ;运行两周为1MS,再加上最前面的MOV R6那条指令,就是1.002MS RET 此程序实现的是1.002MS的定时,当然...

用汇编语言设计一个程序,求10个无符号数中的最大值。并将最大值存入变 ...
MMS: MOV B,R7 ;保存数据个数MOVX A,@DPTR ;读取第一个数据MOV R6,A ;作为最大值的初始值MOV R7,A ;也作为最小值的初始值MOV A,DPL ;取第一个数据的地址MOV R3,A ;作为最大值存放地址的初始值MOV R5,A ;也作为最小值存放地址的初始值MOV A,DPHMOV R2,AMOV R4,AMOV A,B ;取数据个数DEC ...

高分求一汇编小程序,
mov ds,ax sti MOV BX,0 MOV DH,04H MOV DL,16H MOV AH,2H INT 10H ;调用BIOS中断把光标置屏幕指定位置(DH,DL分别设置行列) 调整提示信息的位置 LEA DX,MESS1 MOV AH,9H INT 21H ;显示MESS1 MOV BX,0 MOV DH,05H ...

汇编语言小程序求解
只要把速度(340m\/s),估计正确了,温度,根本就不用管他。时间假定为400ms,这数字,应该是一个毫秒、一个毫秒(或微秒)累加出来的。你为什么要一个毫秒、一个毫秒的累加呢?你要是每隔三个毫秒,加一次一,结果,不就是 139m 吗?路程,这不就出来了吗?那里还用什么计算?

汇编语言的一个小程序 为什么显示不出来
问题出在最后的ret上,可以修改为 mov ah, 4cH int 21H 正常返回dos,就可以看到结果了。

相似回答