dabor                   

  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  131 随笔 :: 0 文章 :: 101 评论 :: 0 Trackbacks
; ------------------------------------
; 有个数组可存 10 个字符串, 每个字符串可存的空间大小相等.
; 但每次存入的字符串个数在 0 <= N <= 9 (N 为最后一个字符串) 变化.
; 0-N 之间可能有空字符串; N-9 之间总是不存字符串, 即为空字符串.
; 我们怎样知道每次存入的这几个字符串 0-N 之间是否存在有空字符串?
; ------------------------------------
; 下面是我的解法. 有没有更好的?
; 注: 双引号内为描述伪指令
"清空字符串数组"
xor	ecx, ecx		; 字符串数组 index
mov	ebx, 0ffffffffh		; 用低 10 位存数组状态, 空字符串相应位为 0, 反之为 1
.while	(ecx < 10)
mov    eax, "第 ecx 个字符串的字符数"
.if    (eax > 0)	; 如果非空字符串
shl	ebx, 1
or	ebx, 1		; 左移补 1
"存字符串"
.else			; 如果空字符串
shl	ebx, 1		; 左移补 0
.endif
inc    ecx
.endw
xor	ecx, ecx
.while	(ecx < 10)
mov	ax, bx
or	ax, 0fffeh
.if    (ax == 0ffffh)	; 如果 ebx 末位是 1
and	bx, 0ffffh
.if    (bx != 0ffffh)
"设置 0-N 有空字符串标志"	; <== 达到目的
.endif
.break
.else			; 移去 ebx 末位 0
shr	ebx, 1
.endif
inc    ecx
.endw
posted on 2006-06-02 01:37 dabor 阅读(526) 评论(1)  编辑 收藏 引用 所属分类: 06 疑问点滴

评论

# re: 一个字符串数组问题, 寻求更好解法 2006-06-03 13:43 dabor

;-----------------------------
; 忙了一下,精简了上面的算法
;-----------------------------

"清空字符串数组"
xor ecx, ecx ; 字符串数组 index
mov ebx, 0ffffffffh ; 用低 10 位存数组状态, 空字符串相应位为 0, 反之为 1

.while (ecx < 10)
mov eax, "第 ecx 个字符串的字符数"

.if (eax > 0) ; 如果非空字符串
shl ebx, 1
or ebx, 1 ; 左移补 1
"存字符串"
.else ; 如果空字符串
shl ebx, 1 ; 左移补 0
.endif

inc ecx
.endw

.if (bx != 0)
@@:
shr ebx, 1
jnc @B ; 移去 ebx 末位 0

.if (bx != 0ffffh)
"设置 0-N 有空字符串标志" ; <== 达到目的
.endif
.else
"全空字符串处理"
.endif




  回复  更多评论
  

只有注册用户登录后才能发表评论。