※※只要解决问题就是高手※※进者有分!!!(100分)

  • 主题发起人 newsea008
  • 开始时间
N

newsea008

Unregistered / Unconfirmed
GUEST, unregistred user!
[:)]数据解析:
首先从一个特定的文件中读数据,读出来以后进行编码。
数据是X坐标Y坐标,都是16进制的数,比如x E505 Y FA02 。先转换成二进制的数,把这个数X存入一个16位寄存器中,再建一个16位累加器,低8位首先置1,然后把X左移一位得到的数X'与累加器的数相加,若溢出,则X-1,循环操作直到X=0为止。
如何建寄存器与累加器!!
 
那是针对汇编而言的, 你完全可以用2个Word类型变量代替
 
学习中。。。。。
 
洗耳恭听。
 
tseug说的有道理
 
用嵌入汇编吧,寄存器都是现成的,
16位的,32位的都有
 
题目中一句“若溢出,则X-1”不清楚是什么意思。溢出是很快的,减个 1 做什么?减了
还是溢出,你以为减了就不溢出了?(shl 1) 表示的是 2^n 啊。忽略这句后的代码如下:
const
c:word=$00FF;
var
X:Cardinal;
begin
X:=HexToInt(X坐标Hex)
// HexToInt 这个函数,你自己在论坛可以找到
while X>0 do
begin
x:=(x shl 1)+c;
{ if X>=$10000 then // 原题义我不明白处,所以屏蔽掉了
X:=X-1;}
if X>=$10000 then Break
// 演示例子改为这样,目的只是说明代码写法
end;
MessageBox(Handle,'完成','msg',MB_OK);
end;
另外,什么“16位寄存器”、“16位累加器”,不要想得这么复杂。
 
小雨哥你好,意思是这样的:我要从一个打印文件P中读出数据来用,文件中存了命令和打印数据,打印数据主要是X、Y坐标,比如A4 E5 05 FA 04,A4是命令参数,X:=e505,Y:=FA04.我要分别从文件中提出命令和数据来操作,如何实现?假如数据已经拿出,我就把X存起来作为终点判据,然后把X左移一位后得到的数X'与累加器里的数相加后得到X'',1.若X''最高位有溢出则X坐标-1,然后再把X'与X''溢出后得到的数X'''相加,重重复以上操作。2.若X''最高位没有溢出则X坐标不变,继续用X'与X''相加,这样判断操作直到X减到0为止,再取下一条X坐标作以上操作。麻烦你再给指点!!!
 
小雨哥你好,怎么定义C: WORD:=$00FF,编译出错?
 
可以使用asm嵌入汇编操作
 
分来。:)
 
顶部