汇编程序设计——语言翻译机
实验内容
本次汇编程序设计题目选自2006年百度之星程序设计大赛初赛题目。原题如下:
百度的工程师们是非常注重效率的,在长期的开发与测试过程中,他们逐渐创造了一套他们独特的缩率语。他们在平时的交谈,会议,甚至在各中技术文档中都会大量运用。为了让新员工可以更快地适应百度的文化,更好地阅读公司的技术文档,人力资源部决定开发一套专用的翻译系统,把相关文档中的缩率语和专有名词翻译成日常语言。
输入数据:
输入数据包含三部分
1. 第一行包含一个整数 N( N<=10000 ),表示总共有多少个缩率语的词条。
2. 紧接着有N行的输入,每行包含两个字符串,以空格隔开。第一个字符串为缩率语(仅包含大写英文字符,长度不超过 10 ),第二个字符串为日常语言(不包含空格,长度不超过 255 )。
3. 从第 N+2 开始到输入结束为包含缩略语的相关文档。(总长度不超过 1000000 个字符)
输出数据:
将缩率语转换成日常语言,其他字符保留原样。
输入样例:
6
PS(门户搜索部)
NLP(自然语言处理)
PM(产品市场部)
HR(人力资源部)
PMD(产品推广部)
MD(市场发展部)
百度的部门包括PS,PM,HR,PMD,MD等等,其中PS还包括NLP小组。
输出样例:
百度的部门包括门户搜索部,产品市场部,人力资源部,产品推广部,市场发展部等等,其中门户搜索部还包括自然语言处理小组。
算法流程图
本程序算法流程图如下:
开始
main:
输出提示;
call input;
call rank;
BX=string[0].word1;
以X首地址和BX为入口参数
call strstr;
BX=BX+64
AX=0?
yes
no
SI=AX;
[SI]=’$’
no
AX=0?
SI+被替换词条长度;
call strcpy;
AX=BX,AX+22指向替换词条;
call strcat;
call strstr;
yes
输出X
结束
注:input函数中使用0ah系统调用时输入完一个词条和文本后需要将缓冲区中字符串末尾回车符替换为$。
Num-1=0?
rank(排序):
no
yes
SI=-1
INC SI;
DI=SI;
INC DI
string[si].count1>=string[di].count1?
yes
no
temp=string[si];
string[si]=string[di];
string[di]=temp;
di=num-1?
yes
no
si=num-2?
no
yes
return
strstr(查找):
SI=要替换词条的首地址;
DI=文本首地址;
yes
[DI]=’$’?
no
CX=要替换的词条长度;
CLD;
REPE EMPSB;
INC DI
AX=0
ZF=1?
no
yes
AX=DI
return
SI=源串首地址;
Di=y首地址;
strcpy(复制):
[di]=[si];
Inc si;
Inc di;
[si]=’$’?
yes
no
Di=‘$’
return
Strcat(粘贴):
SI=源串首地址;
DI=目的串首地址;
inc di
DI=‘$’?
no
yes
[DI]=[SI]
Inc di;
Inc si;
DI=‘$’?
?
no
yes
return
实验结果
源程序
.model small
.586
.data
num db ? ;替换词条个数
buf0 db 5 ;输入词条个数缓存
count0 db ?
word0 db 5 dup(0)
tihuan struc
buf1 db 20 ;结构体,储存数据
count1 db ?
word1 db 20 dup('$')
buf2 db 40
count2 db ?
word2 db 40 dup('$')
tihuan ends
string tihuan 100 dup (<>) ;结构体数组,存储词条
temp tihuan <>
buf3 db 100 ;输入句子缓存
count3 db ?
x db 100 dup('$')
y db 100 dup('$')
note db '此程序实现了字符串的查找替换。例如',0ah,0dh,'输入(每行以回车键结束)',0ah,0dh,'2',0ah,0dh,
'NWPU',0ah,0dh,'T
字符串的查找与替换汇编实现 来自淘豆网m.daumloan.com转载请标明出处.