汇编网首页登录博客注册
masmaster的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
文章收藏

[2010-08-09 21:56] 顺序表算法练习之:表的拆分

图片载入中
题目是将一个表中的元素正负数分成两个表,LA和LB,LA存放整数,LB中存放负数。
重要算法是判断正负数。没有别的什么难度。唯一的亮点就是忠于用上了neg指令。 打印负数的时候, 就用得上啦。
;-----------------------------------------------------
  1 title   split array,creat two new array
  2 assume  cs:code,ds:data,ss:stack
  3 data    segment
  4 array   db      2,-6,4,0,-2,4,5,-6,-5,1,-9,9,-8
  5 org     10h
  6 la      db      10 dup (0)
  7 org     10h
  8 lb      db      10 dup (0)
  9 crlf    db      0dh,0ah,'$'
 10 a       db      0
 11 b       db      0
 12 data    ends
 13 stack   segment stack
 14 dw 128 dup (0)
 15 stack   ends
 16 code    segment
 17 start:
 18         mov ax,stack
 19         mov ss,ax
 20         mov sp,256
 21         mov ax,data
 22         mov ds,ax
 23 ;----------------------------------------------------------------;
 24 ;print old array
 25         mov si,offset array
 26         mov cx,lengthof array
 27 show1:
 28         mov al,[si]
 29         cmp al,0
 30         jnl _int
 31         mov dl,'-'
 32         mov ah,2
 33         int 21h
 34         mov al,[si]
 35         neg al
 36 _int:
 37         mov dl,al
 38         or dl,30h
 39         mov ah,2
 40         int 21h
 41         mov dl,' '
 42         mov ah,2
 43         int 21h
 44         inc si
 45         inc di
 46         loop show1
 47         mov dx,offset crlf
 48         mov ah,9
 49         int 21h
 50 ;----------------------------------------------------------------;
 51 ;split array
 52         mov si,offset array
 53         mov di,offset la
 54         mov bx,offset lb+10h
 55         mov cx,lengthof array
 56 fg:
 57         mov al,[si]
 58         cmp al,0
 59         jnl ff
 60         mov [bx],al
 61         inc bx
 62         inc ds:b
 63         jmp ol
 64 ff:
 65         mov [di],al
 66         inc di
 67         inc ds:a
 68 ol:
 69         inc si
 70         loop fg
 71 ;----------------------------------------------------------------;
 72 ;print la lb
 73         mov si,offset la
 74         mov cl,ds:a
 75 p1:
 76         mov dl,[si]
 77         add dl,30h
 78         mov ah,2
 79         int 21h
 80         mov dl,' '
 81         mov ah,2
 82         int 21h
 83         inc si
 84         loop p1
 85
 86         mov dx,offset crlf
 87         mov ah,9
 88         int 21h
 89
 90         mov si,offset la+10h
 91         mov cl,ds:b
 92 p2:
 93         mov dl,'-'
 94         mov ah,2
 95         int 21h
 96         mov dl,[si]
 97         neg dl
 98         add dl,30h
 99         mov ah,2
100         int 21h
101         mov dl,' '
102         mov ah,2
103         int 21h
104         inc si
105         loop p2
106 ;----------------------------------------------------------------;
107         mov ah,4ch
108         int 21h
109 code    ends
110 end     start
;-----------------------------------------------------
这样程序还可以裁剪掉很多无用指令。知道思路就ok啦, 不再修改啦。
评论次数(0)  |  浏览次数(533)  |  类型(程序与练习) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码