一道pascal编程题:汇编语言(ASM)

汇编语言的程序有两类语句,顺序执行语句和跳转语句。跳转语句的格式为:jmp行号,作用是跳到行号所指的那一行去执行。顺序语句执行后不会对程序的执行顺序作任何改变。比如下面的... 汇编语言的程序有两类语句,顺序执行语句和跳转语句。跳转语句的格式为:jmp 行号,作用是跳到行号所指的那一行去执行。顺序语句执行后不会对程序的执行顺序作任何改变。
比如下面的这个程序:
mov ax, @data
mov ds, ax
jmp 5
jmp 2
mov ax, 4C00H
int 21H
这个程序一共有6条语句,其中第三和第四条是跳转语句。
程序从第一行开始执行,执行到第三行后就跳到第五行执行,执行到第六行后程序结束。
你的任务是编写一个程序,判断一个汇编程序会执行多少行语句后退出,或者会进入死循环。
【输入数据】
第一行是一个数字n,表示程序行数(1<=n<=200)
下面的n行,每行是一条语句,语句前没有多余空格。
【输出数据】
一个数字,表示程序执行的行数。如果程序进入了死循环,则输出数字0。
【样例】
asm.in
6
mov ax, @data
mov ds, ax
jmp 5
jmp 2
mov ax, 4C00H
int 21H

asm.out
5
展开
 我来答
zyh617517224
2011-07-23 · TA获得超过1549个赞
知道小有建树答主
回答量:654
采纳率:0%
帮助的人:808万
展开全部
var a:array[0..210]of string;
b:array[0..210]of boolean;
n,i,step:longint;
begin
readln(n);
for i:=1 to n do readln(a[i]);
i:=1;
while i<=n do
begin
if b[i] then
begin
writeln(0);
halt;
end;
b[i]:=true;
inc(step);
if copy(a[i],1,4)='jmp ' then
begin
delete(a[i],1,4);
val(a[i],i);
end
else inc(i);
end;
writeln(step);
end.
weicaihui2008
2011-07-23 · TA获得超过215个赞
知道小有建树答主
回答量:367
采纳率:100%
帮助的人:201万
展开全部
能再详细的,行吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pteac
2011-07-23 · 超过34用户采纳过TA的回答
知道答主
回答量:81
采纳率:0%
帮助的人:95万
展开全部
很简单.建图..抽象成点...一般点向下一个点连边..表示顺序执行...jmp连边到目标..表示跳跃..之后tarjan(dfs)判环,有环就无解
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
邓卓冉250
2011-08-03
知道答主
回答量:2
采纳率:0%
帮助的人:0
展开全部
var a:array[0..210]of string;
b:array[0..210]of boolean;
n,i,step:longint;
begin
readln(n);
for i:=1 to n do readln(a[i]);
i:=1;
while i<=n do
begin
if b[i] then
begin
writeln(0);
halt;
end;
b[i]:=true;
inc(step);
if copy(a[i],1,4)='jmp ' then
begin
delete(a[i],1,4);
val(a[i],i);
end
else inc(i);
end;
writeln(step);
end.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式