Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 计算程序集中的有效地址_Assembly_X86 16 - Fatal编程技术网

Assembly 计算程序集中的有效地址

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

我需要计算每行的有效地址。我知道您将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 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位的数据总线。我来修正答案。