一个数组9个元素,找出第一个非0的,显示标志号,没有则显示not found 要求用两种方法(循环算一种)

lin_style 2006-11-15 12:12:17
RT。。

求循环和另一种。
...全文
145 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Unique19 2006-11-21
  • 打赏
  • 举报
回复
用scas指令,把本例稍加改变就可以的.
DATA SEGMENT
ARRAY DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0
nofind db 'NO FOUND!$'
DATA ENDS
EATA SEGMENT
EATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA, ES:EATA

START: mov ax, DATA
mov DS, ax
MOV ES, AX
MOV DI, OFFSET ARRAY
MOV BX, DI
mov al, 0
cld
mov cx, 0dh
repz scasb
JZ M1
MOV AX, DI
SUB AX, BX
mov dl, al
push ax ;加一句
mov cl, 4
shr dl, cl
call disp
pop ax ;加一句
mov dl, al
and dl, 0fh
call disp
mov ah,4ch ;把原来的ret 换成这二句
int 21h

M1: lea dx,nofind
mov ah,9
int 21h
M2: MOV AH,4CH
INT 21H
disp proc near
cmp dl, 9
jbe m4
add dl, 7
m4: add dl, 30h
mov ah, 2
int 21h
ret
disp endp
CODE ENDS
END START
ciahi 2006-11-18
  • 打赏
  • 举报
回复
另一种用scas指令就可以
mov al,0
mov di,offset array
cld
repz scasb
……
xuyouqiang 2006-11-18
  • 打赏
  • 举报
回复
程序模板

SSEG SEGMENT PARA STACK 'stack'
dw 100h dup(0) ;初始化堆栈大小为100
SSEG ENDS

DSEG SEGMENT
array db 0,1,0,0,0,0,0,0,0
nofind db "NO FOUND$"
;数据段:在此处添加程序所需的数据
DSEG ENDS

ESEG SEGMENT
;附加段:在此处添加程序所需的数据
ESEG ENDS

CSEG SEGMENT
assume cs:CSEG, ds:DSEG, es:ESEG, ss:SSEG



MAIN PROC FAR ;主程序入口

mov ax, dseg
mov ds, ax
mov ax,eseg
mov es, ax


;此处添加主程序代码
mov cx,3
xor al,al
lea bx,array
lop: cmp [bx],byte ptr 0
jnz last
inc al
inc bx
loop lop
jmp nofound
last: mov dl,al
add dl,30h
mov ah,2
int 21h
jmp jiewei
nofound: lea dx,nofind
mov ah,9
int 21h
;按任意键退出
jiewei: mov ah,1
int 21h

mov ax, 4c00h ;程序结束,返回到操作系统系统
int 21h
MAIN ENDP

CSEG ENDS

END MAIN

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧