2018-10-14 汇编语言的一点小笔记

2018-10-14  本文已影响0人  魔一方

这篇文章还没写完,因为这个程序没看懂还。。。

例:从键盘输入10个数,分别统计0~9、10~99、100~数的个数,并在显示器上显示。

问题分析:

1.输入:从键盘输入一个数,并转换成二进制形式;

2.统计;

3.重复 1.2.  10次;

4.显示结果。

数据定义:

message  db   'input data please:',0dh,0ah,'$'  //0d 0a 一个是回车 一个是换行,回车将光标切换到行首,换行就是换行

message2  db  'output:',0dh,0ah,'$'

maxlen  db  6    ;此处输入数据段代码 

   db  0

   db  6 dup(9)

display  db  ' 0~ 9:',?,?,0dh,0ah

  db  '10~99:',?,?,0dh,0ah

  db  '100~ :',?,?

cr  db  0dh,0ah,'$'//其实我也不知道这句话在干嘛 ,明天问一下老师吧。。。

count0  db  0

count1  db  0

count2  db  0

 ;输入并统计

  mov  cx,10

      lea  dx,message          ;把message的地扔到dx寄存器里

      mov  ah,9                            

      int  21h   //这是一个固定搭配,让显示器显示以下。

next:  call  read_exch                     ;输入一个数据,结果在dx中,调用子程序了!

  cmp  dx,10      比较

  jae  g_10        如果大就去另外一个子程序

  inc  count0         ;//比10小就把这个计数器加一

  jmp  a_num_end

g_10:  cmp  dx,100        

  jae  g_100

  inc  count1  ;10~99

  jmp  a_num_end

g_100:inc  count2  ;100~

a_num_end:

  loop  next      

;显示结果 

  lea  dx,message2

      mov  ah,9

      int  21h

  mov  bx,offset display //问题来了,这个是什么鬼

  mov  al,count0

  call  exch_to_asc10

  mov  [bx+6],ah

  mov  [bx+7],al

  mov  al,count1

  call  exch_to_asc10

  mov  [bx+16],ah

  mov  [bx+17],al

  mov  al,count2

  call  exch_to_asc10

  mov  [bx+26],ah

  mov  [bx+27],al

  mov  dx,bx

  mov  ah,9

  int  21h     //显示这个我完全没看懂。。。

read_exch  procnear

      push  cx

  mov  dx,offset maxlen

      mov  ah,0ah

      int  21h

      lea  dx,cr

  mov  ah,9

  int  21h

      mov  ax,0

      mov  cl,maxlen+1

      mov  bx,offset maxlen

      add  bx,2

again:  mov  dh,0

  mov  dl,[bx]

  and  dl,0fh

  mov  ch,10

  mul  ch

  add  ax,dx

  inc  bx

  dec  cl

  jnz  again

  mov  dx,ax

  pop  cx 

  ret

read_exch  endp

exch_to_asc10  proc  near

  mov  ah,0

  mov  dl,10

  div  dl

  or  ax,3030h

  xchg  ah,al

  ret

exch_to_asc10  endp 

exch_to_asc  proc  near

  push  ax

  mov  cl,4

  shr  al,cl

  or  al,30h

  cmp  al,39h

  jbe  is_data_h

  add  al,7

is_data_h:

  mov  dh,al

  pop  ax

  and  al,0fh

  or  al,30h 

  cmp  al,39h

  jbe  is_DATA_L

  ADD  al,7

is_data_l:

  mov  ah,dl 

  ret

exch_to_asc  endp 

上一篇下一篇

猜你喜欢

热点阅读