欢迎扫码关注微信公众号

回复关键字【资料】获取各种学习资料王爽《汇编语言》(第三版) 实验8、9:_补码

王爽《汇编语言》(第三版) 实验8、9:_微信公众号_02

下面的程序简单分析了一下:

assume cs:code
 
code segment
			mov ax, 4c00H
			int 21h 
			
	start:	mov ax, 0
		s:	nop
			nop
			
			mov di, offset s
			mov si, offset s2
			mov ax, cs:[si]
			mov cs:[di], ax
			;取得s和s2偏移地址分别存放到di和si中
			;之后将s2处对应的指令转移到s的第一个指令
		s0:	jmp short s
			;跳转到标号s处
			;具体计算方法为s0处对应IP+2+位移(负数用补码表示)
			;上面已经将s处的第一条指令更改为了s2的第一条指令
			;所以会执行jmp short s1指令,但是实际上jmp short s1
			;的机器码还是s2相对于s1的位移,也就是EBF6
			;F6为补码表示,-10,由于计算方法为s2对应IP+2-10
			;故而最终结果就是指令被转移到了s对应IP-8的位置
			;s对应的IP为0008,因此,最后的结果就是执行cs:0000处
			;的指令:mov ax, 4c00H,之后执行int 21H
			;程序正常终止
			
			
		s1:	mov ax, 0
			int 21h
			mov ax, 0
			
		s2:	jmp short s1
			nop
code ends
end start

debug全屏模式alt+enter
实验9:
代码:

assume cs:code
 
data segment
	dw 57h, 65h, 6Ch, 63h, 6Fh, 6Dh, 65h, 20h, 74h, 6Fh, 20h, 74h, 68h, 65h, 20h, 77h, 6Fh, 72h, 6Ch, 64h, 21h
data ends

code segment 
start:	mov ax, 0b800h
		mov ds, ax
		mov ax, data
		mov es, ax
		mov bx, 0 
		mov cx, 15h
	s:	mov al, es:[bx]
		mov ah, 02h
		mov ds:[bx], ax
		add bx, 2
		loop s
		
		mov ax, 4c00h
		int 21h
code ends
end start

效果:
王爽《汇编语言》(第三版) 实验8、9:_其他_03