用汇编编写一个从键盘上输入并排序的程序

用汇编编写一个从键盘上输入并排序的程序data segment shuzi_w db 0 key DW 100 dup(0) ;输入的数的存放位置 buffer dw 0 ;输入数字的暂存位置 输入的数字大于10 需要缓冲 n db 1 ; 总共输入的数字个数 注意从1开始 loop循环原因 n1 db
摘要由CSDN通过智能技术生成

用汇编编写一个从键盘上输入并排序的程序

data segment 
	shuzi_w db 0
      key DW 100 dup(0)   ;输入的数的存放位置
      buffer dw 0 ;输入数字的暂存位置 输入的数字大于10 需要缓冲
      n   db 1            ; 总共输入的数字个数     注意从1开始 loop循环原因
      n1  db 1
      pkey db 'the programmer has been done ..' ,0dh,0ah,24h
      string db 'please input data: ',0dh,0ah,24h      
      string1 db 0dh,0dh,0dh,0dh,'output: ',0dh,0ah,'$'
      kongge db 0dh, 0ah,24h 
      data ends                 
stack segment
      dw   128  dup(0)
stack ends
code segment
	assume cs:code,ds:data,ss:stack
start:
	xor ax,ax   
      push ax
      mov ax, data
      mov ds, ax
      mov es, ax
      lea dx , string
      mov ah, 09h
      int 21h              ;显示请输入数据   
      mov di , offset key
      mov ax , 0       
      mov buffer,ax
biaohao1:            ;程序输入处
      mov ah,08h       ;键盘输入但不显示
      int 21h              ; 输入保存在AL中    
      cmp al,0dh;  输入是回车,直接结束输入
      
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是汇编程序的代码: ``` .model small .stack 100h .data msg1 db 'Enter first string: $' msg2 db 'Enter second string: $' msg3 db 'Merged and sorted string: $' input1 db 20,?,dup('$') ; 存放第一个字符串 input2 db 20,?,dup('$') ; 存放第二个字符串 merged db 40,?,dup('$') ; 存放合并后的字符串 nl db 10,13,'$' ; 换行符 .code main proc mov ax, @data mov ds, ax ; 初始化数据段寄存器 ; 输出提示信息,获取第一个字符串 lea dx, msg1 mov ah, 9 int 21h lea dx, input1 mov ah, 0Ah int 21h ; 输出提示信息,获取第二个字符串 lea dx, msg2 mov ah, 9 int 21h lea dx, input2 mov ah, 0Ah int 21h ; 合并两个字符串 lea si, input1 lea di, merged mov cx, [si] ; 获取第一个字符串的长度 movsb ; 复制第一个字符串 lea si, input2 mov cx, [si] ; 获取第二个字符串的长度 movsb ; 复制第二个字符串 mov byte ptr [di], '$' ; 添加字符串结束符 ; 排序合并后的字符串 lea si, merged ; SI 指向合并后的字符串 mov cl, [si] ; 获取字符串的长度 dec cl ; 长度减一,因为要去掉字符串结束符 mov di, si ; DI 指向字符串的开头 inc di ; DI 指向第一个字符 mov bx, di ; BX 存储当前比较字符的地址 sort_loop: cmp cl, 0 ; 如果字符串已经排序完成,跳出循环 jle sort_done mov cx, cl ; CX 存储当前字符串的长度 mov si, di ; SI 存储当前比较字符的地址 inc si ; SI 指向下一个字符 inner_loop: cmp cx, 0 ; 如果已经比较完整个字符串,跳出循环 jle inner_done mov al, [bx] ; AL 存储当前比较字符的值 mov dl, [si] ; DL 存储下一个字符的值 cmp al, dl ; 比较两个字符 jle no_swap ; 如果不需要交换,跳过 mov ah, [bx] ; 交换字符 mov al, [si] mov [bx], al mov [si], ah no_swap: inc si ; SI 移动到下一个字符 dec cx ; CX 减一 jmp inner_loop inner_done: inc di ; DI 移动到下一个字符 dec cl ; CX 减一 mov bx, di ; BX 存储当前比较字符的地址 jmp sort_loop sort_done: ; 输出合并后的字符串 lea dx, msg3 mov ah, 9 int 21h lea dx, merged mov ah, 9 int 21h lea dx, nl mov ah, 9 int 21h mov ah, 4ch int 21h ; 程序结束 main endp end main ``` 上述程序使用 `int 21h` 中断来进行输入和输出操作,并使用字符串指针和字符串指令来处理字符串。它将两个输入的字符串合并为一个字符串,并对合并后的字符串进行冒泡排序。最后,它输出排序后的合并字符串。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值