我需要計算每一行的有效地址。我知道你將DS向左移一次並添加偏移量,但當您更改默認數據段時,我感到困惑?對於第一行,我只需添加ES + DI而不是使用DS?在彙編中計算有效地址
使用這些:Register Numbers 一個我知道的一個例子是右
IN AL, 70H
OUT DX, AX
OUT 21H , AL
我需要計算每一行的有效地址。我知道你將DS向左移一次並添加偏移量,但當您更改默認數據段時,我感到困惑?對於第一行,我只需添加ES + DI而不是使用DS?在彙編中計算有效地址
使用這些:Register Numbers 一個我知道的一個例子是右
IN AL, 70H
OUT DX, AX
OUT 21H , AL
IN/OUT不使用段寄存器中,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使用little-endian字節順序)。假設DX具有值0022H和AX是2355H然後
OUT DX, AX ; Write 2355H (AX) to port 0022H (16-bit data bus)
ADD ES:[DI],AL - >地址=(ES << 4)+ DI – rcgldr
好了,所以我得到的答案3A000H?有什麼方法可以將這些輸入模擬器並檢查我的答案嗎? – TuscanAu
是的,通過觀看地址03a000h處的內存並查看該指令是否被更改。 – rcgldr