【问题标题】:What is the meanings of "hiticks" and "loticks" in assembly langauage?汇编语言中的“hiticks”和“loticks”是什么意思?
【发布时间】:2018-09-10 09:38:12
【问题描述】:

我正在尝试理解用汇编语言编写的代码,谁能告诉我下面代码中“hiticks”和“loticks”的含义?它们是寄存器还是变量?我检查了 n=internet,但找不到任何示例。

 mov dx,1AH
    mov ax,[loticks]
    sub dx,ax
    mov [hiticks],dx
    mov ax,[hiticks]
    jmp end
hiticks dw 0H
loticks dw 10H
    end

感谢您的回答。

【问题讨论】:

  • 两者都不是。底部的lotick 后面跟dw 是符号/标签的定义,即内存地址的“名称”(标签就像内存中的书签)。 dw 将发出两个字节的机器代码(形成字值10h,因此这两个字节将是 16 和 0)并且标签 loticks 指向第一个字节。然后在源的其他部分,如mov ax,[loticks] - 这是内存操作数,使用loticks 作为内存地址=> 针对这两个字节,所以mov 之后的ax 将包含该值16(除非内存那里的内容同时被修改为其他内容)。
  • 而且我不会在下面的答案中称它们为“变量”,因为在汇编中它们缺少任何高级语言功能,例如您可以(在 80386+ CPU 上)@987654333 @ 它将同时加载四个连续字节的内存,即同时加载“hiticks”和“loticks”“变量”,将这 16+16 位连接成 32 位 100000h。如果您愿意,汇编程序或 CPU 不会阻止您执行此操作,因此将其视为内存和书签更安全,而不是将其视为“变量”并期待某种类型检查。这取决于程序员。
  • 我还是不明白。这是否意味着 loticks 和 hiticks 的值都是 0?
  • 不,它们是内存地址。确切的值取决于它们链接的位置(和/或由 OS 加载程序重新定位)...例如,如果这是在 DOS COM 文件中,从偏移量 100h 加载,那么前面的代码是 11h 字节长,所以hiticks = 111h和loticks = 113h。所以mov ax,[loticks] 是mov ax,[113h],如果ds 指向该代码所在的正确内存段,ax 将从内存中加载值10h(由dw 10h 在该地址初始化)。
  • 也许可以尝试阅读这个homepage.cs.uri.edu/faculty/wolfe/book/Readings/Reading04.htm(我只是快速浏览了一下,没有看到任何完全错误/可怕的地方,虽然我也没有完全感到惊讶......关于页面末尾的内存寻址,但可能足以了解 asm 源中的这些标签如何成为实际内存地址的占位符)

标签: variables assembly assemblies cpu-registers


【解决方案1】:

这些是变量声明。

hiticks dw 0H 声明了一个双字 (dw),即一个 4 字节长的变量,命名为 hiticks,并将其值设置为 0。

loticks dw 10H声明一个名为loticks的双字并将其值设置为0x10。


更多信息:https://www.tutorialspoint.com/assembly_programming/assembly_variables.htm

【讨论】:

  • DW 代表 Define Word,而不是双字。使用英特尔分类法,两者确实都是 16 位字。
  • 我还是不明白。这是否意味着 loticks 和 hiticks 的值都是 0?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-23
  • 2017-08-28
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多