机器码的小端方式
2025-01-04 11:23:54 # 汇编

​ 今天在看8086汇编时弹出了一个疑问:在以小端方式存储的cpu上,一条指令(操作码和地址码)的机器码也是直接以小端方式存放的吗?例如如下汇编代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
assume cs:code
code segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
mov bx,0
mov ax,0
mov cx,8
s: add ax,cs:[bx]
add bx,2
loop s

mov ax,4c00h
int 21h
code ends
end

编译后的机器码如下:

image1

对于mov cx,0008,对应的机器码为B90800,可以发现0800为mov指令中的立即数,并且是以小端方式存储的,而前面的B9应该是操作码对应的机器码,如果指令也是小端方式存储的,那么指令格式应该是0800B9,但这与实际的机器码不一样。

再在内存中查看该指令的机器码:

image2

发现B9是存储在低地址中的。通过查看其它指令也是如此。

所以可知8086 指令存储规则:

  1. 指令的操作码部分存储在低地址。
  2. 操作数的字节按照小端方式存储。

大端、小端方式是针对数据部分的,具体指数据的高位字节和低位字节在内存中的排列方式,不针对操作码。

参考:

1、汇编与机器指令转换

上一页
2025-01-04 11:23:54 # 汇编