c++内嵌了一段汇编,有两行编译不过,请大家帮忙看一下

mem0set 2009-10-16 09:18:17
DWORD dwByteTree[765];
WORD wByteTree[765];
char dwBitTree[765];
DWORD dwRootIndex,dwCodeCount,dwStorage;
WORD wTreeSize;

int iElements,iTotalElements;

void HuffmanInitArrays()
{
__asm
{
MOV EDI,OFFSET dwWeight[0] //这句不行
MOV ECX,256
_InitWeight:
MOV DWORD PTR [EDI],0
ADD EDI,4
DEC ECX
JNZ _InitWeight
}

__asm
{
MOV EDI,OFFSET dwBitTree[0] //这句不行
MOV EAX,0
MOV ECX,255
_InitBitTree:
MOV char PTR [EDI + EAX],2
ADD EAX,3
DEC ECX
JNZ _InitBitTree
}
}
...全文
180 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
genboo 2009-12-29
  • 打赏
  • 举报
回复
mark!
KingWolfOfSky 2009-12-29
  • 打赏
  • 举报
回复
回帖是一种美德~~~
cnzdgs 2009-10-17
  • 打赏
  • 举报
回复
改成:
LEA EDI, dwWeight
LEA EDI, dwBitTree
老老辉辉 2009-10-17
  • 打赏
  • 举报
回复
dwWeight[0] ,从你给的程序中好像看不到定义,就是定义了,也直接引用标号,即可!
friendly_ 2009-10-17
  • 打赏
  • 举报
回复
两个__asm{}在这里是分别初始化两个数组用的.

第一个__asm{}里貌似是用来初始化DWORD dwWeight[256]的,初始为0,但是没看到你定义的DWORD dwWeight[256]数组.

第二个__asm{}里貌似是用来初始化char dwBitTree[765]数组的,但是char PTR肯定是不对的了,应该是byte ptr,
但是若是这样,你是用的[EDI + EAX],然后每次eax+3,这样的话,初始化的只是数组的0,3,6,9等位为2.不知道这是不是你的意思.
野男孩 2009-10-17
  • 打赏
  • 举报
回复
一下代码在VC6上编译通过,运行正常

另外,lz是啥编译器?


#include <windows.h>

DWORD dwWeight[256];
char dwBitTree[765];

int main()
{
__asm
{
MOV EDI,OFFSET dwWeight[0] //这句不行是因为没定义dwWeight,我补上了全局变量的定义
MOV ECX,256
_InitWeight:
MOV DWORD PTR [EDI],0
ADD EDI,4
DEC ECX
JNZ _InitWeight
}

__asm
{
MOV EDI,OFFSET dwBitTree[0] //lz说这句不行. 真的不行吗???我这可以
MOV EAX,0
MOV ECX,255
_InitBitTree:
MOV BYTE PTR [EDI + EAX],2 //这里原来是char PTR,这个是真不行,改成了BYTE PTR
ADD EAX,3
DEC ECX
JNZ _InitBitTree
}

return 0;
}
BAYNPU 2009-10-17
  • 打赏
  • 举报
回复
MOV EDI,OFFSET dwWeight[0] //这句不行 ;改为MOV EDI,OFFSET dwByteTree[0]
MOV EDI,OFFSET dwBitTree[0] //这句不行 ;改为MOV EDI,OFFSET wByteTree[0]

21,497

社区成员

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

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