4

我正在尝试使用 Metal C 中的 WTO 指令将“Hello World”打印到我的工作日志中。这是基于 z/OS V1R10.0 Metal C Programming Guide and Reference 的第 1.2.3.5 节中的示例当我使用 WTO 时出现的问题是我的缓冲区包含 0 或 ASCII 到 EBCDIC 转换。我在下面粘贴了我的工作日志的相关部分,然后是我的代码,然后是我无法编译的 IBM 示例中的代码。作业日志

09.01.56 J0686275 IEF403I IMIJWS0G - 开始 - 时间 = 09.01.56
 09.01.56 J0686275 +...0.......
 09.01.56 J0686275 - --计时(分钟)-- ----分页计数---
09.01.56 J0686275-IMIJWS0G 去 00 6 .00 .00 .00 1292 0 0 0 0 0 1
 09.01.56 J0686275 IEF404I IMIJWS0G - 结束 - 时间 = 09.01.56

我的代码

#包括
#包括
#包括
 主函数()
 {
                                    结构 WTO_PARM {
               无符号短长度;
               无符号短代码;
               字符*文本;
            } wto_buff = { 4+11, 0, "你好世界" };
            __asm(" WTO MF=(E,(%0))" : : "r"(&wto_buff));

        }

IBM 代码

int main() {

            结构 WTO_PARM {
               无符号短长度;
               无符号短代码;
               字符文本[80];} wto_buff = { 4+11, 0, "你好世界" }; __asm(" WTO MF=(E,(%0))" : : "r"(&wto_buff));
            返回0;
        }
4

4 回答 4

3

IBM 示例对我有用(在 Z/os 1.9 下),但我必须添加一个编译指示来设置代码页:在示例顶部:#pragma filetag("IBM-500") 编译器不接受 [ 和 ]在字符文本[80]中;我也尝试将 char text[80] 更改为 char *text ,但我得到了和你一样奇怪的结果。

于 2009-10-16T07:59:28.520 回答
1

也许两个版本的结构在内存中的布局不一样?我在 gcc 中试过这个:

#include <stdio.h>

struct WTO_PARM {
    unsigned short len;
    unsigned short code;
    char *text;
};

int main()
{
    struct WTO_PARM moo = { 4+11,0,"hello" };
    printf("size %zu struct %p string %p\n", sizeof(struct WTO_PARM),&moo,moo.text);
    return 0;
}

结果如下:

size 8 struct 0x22cce0 string 0x402000

但是,如果我将 text 参数的类型更改为 char[80],结果将更改为:

size 84 struct 0x22cc80 string 0x22cc84

WTO 指令可能希望将字符串直接打包到该结构中。

于 2009-06-03T14:01:09.570 回答
0

为什么不能编译 IBM 样本?它对我来说很好 - 也许您可以向我们展示您的编译器参数和错误消息?

于 2009-06-04T14:39:25.580 回答
0

您是否通过 TN3270 客户端编辑您的代码?问题很可能与您的模拟器中的代码页有关。例如,我需要在 ISPF 中进行以下更改: c x'4A' x'AD' all (for [ ) 和 c x'5A' x'BD' (for ]) 以编译源代码...

于 2013-07-29T08:16:41.017 回答