设为首页 加入收藏

TOP

5.10 汇编语言:汇编过程与结构(六)
2023-08-26 21:10:31 】 浏览:197
Tags:5.10 程与结
MyUnion Union my_dword DWORD ? my_word WORD ? my_byte BYTE ? MyUnion ends .data PointA Rect <> PointB Rect {<10,20,30>,<100,200,300>} test_union MyUnion {1122h} szFmt BYTE '结构数据: %d',0dh,0ah,0 .code main PROC ; 嵌套结构的赋值 mov dword ptr ds:[PointA.Left.pos_x],100 mov dword ptr ds:[PointA.Left.pos_y],200 mov dword ptr ds:[PointA.Right.pos_x],100 mov dword ptr ds:[PointA.Right.pos_y],200 ; 通过地址定位 lea esi,dword ptr ds:[PointB] mov eax,dword ptr ds:[PointB] ; 定位第一个MyPoint mov eax,dword ptr ds:[PointB + 12] ; 定位第二个内嵌MyPoint ; 联合体的使用 mov eax,dword ptr ds:[test_union.my_dword] mov ax,word ptr ds:[test_union.my_word] mov al,byte ptr ds:[test_union.my_byte] main ENDP END main

当然有了结构体这一成员的加入,我们同样可以在汇编层面实现链表的定义与输出,如下代码所示,首先定义一个ListNode用于存储链表结构的数据域与指针域,接着使用TotalNodeCount定义链表节点数量,最后使用REPEAT伪指令开辟ListNode对象的多个实例,其中的NodeData域包含一个1-15的数据,后面的($ + Counter * sizeof ListNode)则是指向下一个链表的头指针,通过不断遍历则可输出整个链表。

  .386p
  .model flat,stdcall
  option casemap:none

include windows.inc
include kernel32.inc
includelib kernel32.lib
include msvcrt.inc
includelib msvcrt.lib

ListNode Struct
  NodeData DWORD ?
  NextPtr  DWORD ?
ListNode ends

TotalNodeCount = 15
Counter = 0

.data
  LinkList LABEL PTR ListNode
  REPEAT TotalNodeCount
    Counter = Counter + 1
    ListNode <Counter,($ + Counter * sizeof ListNode)>
  ENDM
  ListNode<0,0>                ; 标志着结构链表的结束

  szFmt BYTE '结构地址: %x 结构数据: %d',0dh,0ah,0
.code
  main PROC
    mov esi,offset LinkList
    
    ; 判断下一个节点是否为<0,0>
  L1: mov eax,(ListNode PTR [esi]).NextPtr
    cmp eax,0
    je lop_end
    
    ; 显示节点数据
    mov eax,(ListNode PTR [esi]).NodeData
    invoke crt_printf,addr szFmt,esi,eax
    
    ; 获取到下一个节点的指针
    mov esi,(ListNode PTR [esi]).NextPtr
    jmp L1
    
  lop_end:
    int 3
    
  main ENDP
END main

本文作者: 王瑞
本文链接: https://www.lyshark.com/post/e43f6d19.html
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

首页 上一页 3 4 5 6 下一页 尾页 6/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇两数相加 下一篇ImGui界面优化:使用图标字体、隐..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目