• 汇编语言结构嵌套简述[附带实例]

    结构还可以包含其他结构的实例。例如,Rectangle 可以用其左上角和右下角来定义,而它们都是 COORD 结构:

    Rectangle STRUCT
        UpperLeft COORD <>
        LowerRight COORD <>
    Rectangle ENDS

    Rectangle 变量可以被声明为不覆盖或者覆盖单个 COORD 字段。各种表达形式如下所示:

    rect1 Rectangle < >
    rect2 Rectangle { }
    rect3 Rectangle { {10,10}, {50,20} }
    rect4 Rectangle < <10,10>, <50,20> >

    下面是对其一个结构字段的直接引用:

    mov rect1.UpperLeft.X, 10

    也可以用间接操作数访问结构字段。下例用 ESI 指向结构,并把 10 送人该结构左上角的 Y 坐标:

    mov esi,OFFSET rect1
    mov (Rectangle PTR [esi]).UpperLeft.Y, 10

    OFFSET 运算符能返回单个结构字段的指针,包括嵌套字段:

    mov edi,OFFSET rect2.LowerRight
    mov (COORD PTR [edi]).X, 50
    mov edi,OFFSET rect2.LowerRight.X
    mov WORD PTR [edi], 50

    示例:醉汉行走

    现在来看一个使用结构的小程序将会有所帮助。下面完成一个“醉汉行走”练习,用程序模拟一个不太清醒的教授从计算机科学假期聚会回家的路线。利用随机数生成器,选择该教授每一步行走的方向。假设教授处于一个虚构的网格中心,其中的每个方格代表的是北、南、东、西方向上的一步。现在按照随机路径通过网格,如下图所示。

    醉汉行走的示例路径

更多...

加载中...