+ -
当前位置:首页 → 问答吧 → [修改程序]把原给定数据改成键盘输入数据

[修改程序]把原给定数据改成键盘输入数据

时间:2010-12-07

来源:互联网

Assembly code
.model small,c
.stack
.data
data dw 1567,25,46,4560,678,1234,32540         ;数据数组
len db $-data                                 ;数组个数的两倍(dw)
.code

;子程序功能:用十进制字符串显示ax中的值
;入口参数:ax=所要显示的数值
;出口参数:无
dispax10 proc uses dx bx cx
      mov bx,10
      mov cx,0
next1:
      mov dx,0
      div bx
      add dx,'0'
      push dx
      inc cx
      cmp ax,0
      jnz next1
next2:
      pop dx
      mov ah,02h
      int 21h
      loop next2
      mov dl,20h
      int 21h
      ret
dispax10 endp
      .startup
      xor ax,ax
      xor cx,cx
      xor bx,bx
      xor si,si
      xor di,di
      mov cl,len
      shr cx,1                    ;cx/2,则cx=数组个数
again1:
      dec cx
      cmp bx,cx                   ;bx=i,cx=L;cmp(i,L-1)
      jge over                     ;i>=L-1时,外循环结束
      inc cx
      inc bx
      mov ax,bx                    ;ax=bx+1 => j=i+1
      dec bx
again2:
      cmp ax,cx                   ;ax=j,cx=L;cmp(j,L)
      jge cntinu1                 ;若j>=L,内循环结束,否则交换数据
      mov si,bx                   ;定义两个指针,si=i,di=j分别指向数组内的两个数据
      mov di,ax
      shl si,1                    ;si*2,还原数值在数组中的位置
      shl di,1
      push ax
      mov ax,data[si]
      cmp ax,data[di]             ;比较data[i]与data[j]
      jle cntinu2
      xchg ax,data[di]            ;若有data[i]>data[j],交换两者数值
      mov data[si],ax
cntinu2:
      pop ax
      inc ax
      jmp again2
cntinu1:
      inc bx
      jmp again1
over:
      xor cx,cx
      mov cl,len
      shr cx,1
      mov bx,0
again3:
      mov ax,data[bx]             ;以十进制显示数组数值;程序结束
      call dispax10
      add bx,2
      loop again3
      .exit 0
      end

作者: kartik   发布时间: 2010-12-07

其实就是与你的 dispax10 很相似的一个子程序。

输入每一个数字都是反复地用 INT 21H的1号功能读入字符,直到读入回车键(0DH)。

循环中做这样的处理:
循环前先给某寄存器或内存变量预置一个初值0,每读入一个数字字符,将它化成对应的数字(减30H),然后将前面的那个寄存器或内存变量的数乘以10,再加上刚转化成数字的那个数。

循环完后,那个寄存器或内存变量中就是你输入的数,把它送数组data中即可。

作者: shzhfu   发布时间: 2010-12-08

请楼主参考下面程序里,标号loada和loadb的处理,我用的方法是在数据段定义一个tab表
http://www.asmedu.net/blog/user/postcontent.jsp?neighborId=32262&kindLevel=1&kindId=47796&postId=49334&readSg=1

作者: masmaster   发布时间: 2010-12-08