所以在这段代码中,我试图将select * from
table2 c right outer join table1 a on
c.dt = a.dt
and c.ap_no = a.ap_no
and c.jy_no = a.jy_no
and c.tn = a.tn
left outer join table2 b on
a.dt = b.dt
and a.ap_no = b.ap_no
and a.jy_no = b.jy_no
and a.t_no = b.t_no ------------------> wrongly implemented it
where b.type_cd = 100 and c.type_cd = 200;
插入到数组中,但我真的不知道这段代码有什么问题。因为在_
插入阵列时似乎被卡住了。是否有更好的方法来实现或修复代码?
_
答案 0 :(得分:3)
在循环开始之前,ESI已经指向strUnderscore,因为你以这种方式初始化它。同时,行
mov strUnderscore[ESI], '_'
尝试编写一个字符来处理strUnderscore + ESI。那是不对的。用C语言来说,你现在拥有的是:
char *esi = strUnderscore;
while(...)
{
strUnderscore[(int)esi] = '_';
esi++;
}
您需要运行索引或运行指针。将ESI初始化为0(并将其用作索引),或将mov
命令中的目标地址更改为byte ptr [ESI]
。
此外,LOOP是一个错误的命令(查找它)。请考虑减量和条件跳转。
答案 1 :(得分:1)
代码中有两个错误:
让我们解决它们:
.data
strUnderscore BYTE 20 DUP (?) ;the array
.code
mov ECX,stringLength
mov ESI, OFFSET strUnderscore ;◄■■ ESI IS POINTER TO THE VARIABLE.
mov AL, '_' ;◄■■ MOVE THE "_" INTO A ONE BYTE REGISTER.
L1:
mov [ESI], AL ;◄■■ USE THE POINTER ESI, THE VARIABLE IS NOT NECESSARY.
inc ESI
loop L1
mov EDX, OFFSET strUnderscore
call WriteString