Assembly 计算程序集中的有效地址
我需要计算每行的有效地址。我知道您将DS向左移动一次并添加偏移量,但当您更改默认数据段时,我感到困惑?对于第一行,我是否只添加ES+DI而不是使用DS 使用这些: 我知道的一个例子是正确的Assembly 计算程序集中的有效地址,assembly,x86-16,Assembly,X86 16,我需要计算每行的有效地址。我知道您将DS向左移动一次并添加偏移量,但当您更改默认数据段时,我感到困惑?对于第一行,我是否只添加ES+DI而不是使用DS 使用这些: 我知道的一个例子是正确的 IN AL, 70H OUT DX, AX OUT 21H , AL 输入/输出不使用段寄存器,I/O地址(端口号)在立即数操作数中指定 IN AL, 70H ; Read one byte from I/O port 70H OUT 21H, AL ; Write on
IN AL, 70H
OUT DX, AX
OUT 21H , AL
输入/输出不使用段寄存器,I/O地址(端口号)在立即数操作数中指定
IN AL, 70H ; Read one byte from I/O port 70H
OUT 21H, AL ; Write one byte to I/O port 21H
或在DX寄存器中
OUT DX, AX ; Write two bytes from AX to I/O port specified in DX
您为寄存器提供了以下值
哪个字节是低位字节,哪个是高位字节并不明显(x86使用低位字节顺序)。假设DX的值为0022H,AX为2355H,则
OUT DX, AX ; Write 2355H (AX) to port 0022H (16-bit data bus)
添加ES:[DI],AL->地址=(ESokay所以我得到的答案是3A000H?有没有办法把它们输入模拟器并检查我的答案?是的,通过观察地址03a000h处的内存,看看它是否被该指令改变。好的,所以我得到了确认,除了OUT DX,AX之外,一切都是正确的。它确实利用了两个端口,但地址总线只识别一个端口除此之外,这是一个很好的答案!啊,对了,8086有一个16位的数据总线。我来修正答案。