首页
社区
课程
招聘
[旧帖] [分享][分享]马上转正了 呵呵 。。。发个汇编程序,不要骂我 (*^__^*) 嘻嘻…… 0.00雪花
发表于: 2010-5-18 15:59 1344

[旧帖] [分享][分享]马上转正了 呵呵 。。。发个汇编程序,不要骂我 (*^__^*) 嘻嘻…… 0.00雪花

2010-5-18 15:59
1344
 本来想用8086汇编做个冒泡排序的,但是最近忙着考试,还有其他一些事,再者高手太多,不敢乱发,今天转正就发个吧
算法没有优化,标记也不怎么好,多多包涵
下面的汇编就是实现加法,加法的位数要大点,改数据段定义的数据长度就行了 
data segment
   message1  db  'input  number one:',0dh,0ah,'$'
   message2  db  0dh,0ah,'input  number two:',0dh,0ah,'$'
   message3  db  0dh,0ah,'result is :',0dh,0ah,'$'

   num1      db   200 dup(?)      ;加数1

   num2      db   200 dup(?)      ;加数2

   num3      db   201 dup(?),0dh,0ah,'$'        ;计算结果
   n1         db  0                       ;1的位数
   n2         db  0                       ;2的位数
   nl         db  0                       ;最小位数
   nc         db  0                       ;相差位数
   cc         db  0                       ;选择是谁最大 0 就是1最大,1就是2最大
   num  db  0                             ;进位是否存在的标志

data  ends

code  segment
      assume  cs:code,ds:data;es:data
start: mov ax,data
       mov  ds,ax
       ;显示提示字符串       
       mov ah,09h
       mov  dx,offset message1
       int 21h


       ;读取数字1       
       mov si,offset num1
       
   m:  mov ah,01h
       int 21h 
       cmp al,0dh
       je l
       mov  [si],al
       inc n1
       inc  si
       jmp m
   
       ;显示提示字符串          
   l:  mov ah,09h
       mov  dx,offset message2
       int 21h
       
       ;读取数字2      
       mov si,offset num2      
  m2:  mov ah,01h
       int 21h 
       cmp al,0dh
       je l2
       mov  [si],al
       inc n2
       inc  si
       jmp m2
       ;获取最小位数   ;获取位数差
  l2:     
       push bx
       push  ax
       mov bl,n1
       cmp bl,n2
       jng  d
       mov bh, n2
      
       mov al,n1
       sub al,n2
       mov nc,al
       jmp  t
     
      
      
   d:  mov bh,n1
       add  cc,1   
       mov al,n2
       sub al,n1
       mov nc,al
    
   t:  mov nl,bh  
       pop ax
       pop bx
 
   
      
       
       ;初始化指针

       push  ax
       xor ax,ax
   
       mov si,offset num1
       mov al,n1
       sub al,1
       add  si,al
   
       mov di, offset num2
       mov al,n2
       sub al,1
       add  di,al
   
   
      mov  bx,offset num3
      push ax
      xor ax,ax
      mov al,nc
      add  al,nl
      add  al,1      
      add  bx,ax
      pop ax
   
     


;---------------------------------开始计算
      ;计算相同位
      xor cx,cx
      mov cl,nl

next: mov  ax,[si-1]
      sub  ah,30h
       
      add  ah,[di]
      add  ah,num
        
      push ax
      xor ax,ax
      mov ax,0
      mov  num,al
      pop ax
   
      cmp  ah,39h
      jng  s
      sub  ah,10
      add  num,1
    
   
  
       
     
   
  
   s: mov al,00h
      mov  [bx],ax
      dec cx
      jz  x
      
      dec  di
      dec  bx
      dec si
      jmp  next
        

      

  x: cmp  nc ,0
     je  y      
     jne  y1
  y: jmp o   ;位数一样就跳到0处
 y1: mov  cl, nc
     cmp  cc ,0
     je  s1  ;第一个数字位数大就跳到s1处
     
        
  s2: dec di
      dec  bx
     
       cmp num ,0
       je  x3
       
       xor ax,ax
       mov ah,31h
       mov [bx],ax
       sub num,1 
       mov  ax,[di-1]
       mov al,00h
       sub ah,30h
       add [bx],ax    
       jmp w5
        
   x3: mov  ax,[di-1]
       mov al,00h
       add [bx],ax         
   w5: cmp  [bx],3900h
       jng  s4
       sub  [bx],0a00h
       add  num,1
        
   s4: dec cx
       jz o
       jmp  s2
  
  
  
  s1:  dec  si
       dec  bx
       cmp num ,0
       je  x4
       
       xor ax,ax
       mov ah,31h
       mov [bx],ax
       sub num,1 
       mov  ax,[si-1]
       mov al,00h
       sub ah,30h
       add [bx],ax
       jmp w2
      
   x4: mov  ax,[si-1]
       mov al,00h
       add [bx],ax
      
   w2: cmp  [bx],3900h
       jng  s7
       sub  [bx],0a00h
       add  num,1
        
   s7: dec cx
       jz o
       jmp  s1
        
   ;处理最高位超出        
   o:  cmp num,0
       je  n
       mov ax,3100h
       dec bx
       mov [bx],ax   
      
 ;----------------------------------------------  
 
      
   

 ;显示提示字符串和结果     
 
    n: mov ah,09h
       mov  dx,offset message3
       int 21h
    
       mov ah,09h
       mov  dx,offset   num3
       int 21h
     


    q: mov ah,4ch
       int  21h
code ends
    end  start

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 285
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
羡慕,我不知道什么时候能转正!!!!!!!
2010-5-18 18:16
0
雪    币: 6048
活跃值: (3125)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你快了啊,我还不知道要多久呢
2010-5-18 18:49
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
恭喜恭喜 努力中
2010-5-18 19:39
0
游客
登录 | 注册 方可回帖
返回
//