汇编语言学习(2):寄存器指令练习
题目如图所示,下面我们来分析。
CS=2000H, IP = 0000H这是两个16位地址线给出的地址,它们合成20位地址之后,决定了CPU在内存中读取什么指令。
形成20位地址 = CS *16 + IP,所以初始地址为20000H读取第二列之中的B8, 22, 66三个指令,
对应的汇编指令为 mov ax, 6622h
读取之后IP + 3,因为读取了三个指令,下次要读后三个。
所以下一个读取内存对应的地址为CS=2000H, IP = 0003H,合成20位位20003H,读取EA,03,00,00,10五个指令,
对应的汇编指令为 jmp 1000:3
这种1000:3表示CS=1000H,IP=0003H
读取之后IP + 5,因为读取了5个指令,但是,读取命令的过程中有对IP的赋值,IP = 0003H,CS = 1000H
所以所以这次再读取指令从CS:IP = 10003H来读取,到了第一列,读取B8,00,00三个指令。
对应的汇编指令为 mov ax 0000
注意H大写和小写都表示16进制后缀。
读取之后IP + 3,因为读取了3个指令。
再次读取指令要读取CS:IP = 10006H,读取8B, D8两个指令。
对应的汇编指令为 mov bx, ax
也就是bx也设置成0000H,和ax相同。
读取之后IP +2,因为读取了两个指令。
再次读取指令对应的地址为CS:IP = 10008H,读取两个指令FF,E3
对应的汇编指令为 jmp bx
也就是把IP 设置成bx的值 IP= 0000h
读取之后本应IP +2但是读取的是设置IP ,所以IP直接被赋值0000
这回从CS:IP = 10000H出读取,之后又到了下面,开始循环起来。
所以最后执行的汇编程序中的语句为:
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment