assembly - 试图将一个字节加载到 DX 中,但加载了错误的值
问题描述
我正在尝试将第三个值 (03h) 加载到 DX 中,但加载了错误的值。我不明白发生了什么事。
DATA SEGMENT
STRING1 DB 01h,02h,03h,04h
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX,DATA
MOV DS, AX
LEA BX, STRING1
INC BX
MOV DX, [BX+1]
HLT
CODE ENDS
END START
输出:DX 的值变成了 0403
解决方案
我正在尝试将第三个值(03h)加载到 DX 中,
是的,但是你要求它从地址 STRING+2 和 STRING+3 加载 16 位值,所以它加载 03 和 04,作为 little endian 中的 16 位值:0403。 DX
是一个 16 位寄存器,通过使用它,您要求进行 16 位传输。
如果您只想要一个字节,请使用DL
,例如,而不是DX
否则,可以DW
在数据段中使用。数据大小和传输大小需要匹配。
推荐阅读
- javascript - React/Javascript:以可选参数作为道具传递函数
- db2 - 如何在 DB2 中按 TO_CHAR(datefield,'MM-YYYY') 排序
- php - Dart 不能使用 response.body 作为字符串
- c# - FirebirdSql.Data.FirebirdClient 与 Sysdba 以外的用户连接 - 未定义用户名和密码
- mysql - 在mysql中获得GROUP BY的最高计算分数
- spring-boot - Google App Engine Standard Java 11 中的 Spring 引导配置文件 - gcloud
- django - 本地 python 模块覆盖使用 pip 安装的模块
- r - ggplot2在没有expand_scale()的情况下划分Y轴值
- php - 无法让 ucfirst() 处理变量
- python-3.x - 指定要在 optuna (lightgbm) 中搜索的固定参数和参数