汇编——标号、符号定义、编译运算

1、使用编辑器建立源程序文件t211.asm:
edit t211.asm
内容如下:

mycode segment
	Assume cs:mycode    
Start: 	Mov ax,0
		Mov cx,1
Try:		add ax,cx
		Inc cx
		Jmp try
mycode ends
End start

编译这个源程序文件:masm t211.asm

有错则返回编辑修改,编译通过后连接:Link t2111.obj

成功后用debug调入内存:debug t211.exe

反汇编观察程序,源程序中jmp try指令中标号try变成什么值,为什么?
此程序功能是什么?单步运行程序验证。

源程序中jmp try指令中标号try变成 0006。

jmp是无条件转移指令,jmp后的标号即为运行jmp命令后的IP要改变的偏移量。

此程序的功能是求得自然数的和,将其存入ax中。

使用t命令单步执行程序发现结果一致。

2、使用编辑器建立源程序文件t212.asm
edit t212.asm
内容如下:

mycode segment
	Assume cs:mycode    
Start: 	Mov ax,1234
		Mov ax,1+2
        Mov ax,3*5
		Mov ax,13/2
		Mov ax ,3+4*2
mycode ends
End start

编译连接后用debug运行程序,观察验证每条指令运行后AX的结果。

实验结果如下:

  运行指令	         运行后AX的结果
Mov ax,1234           	04D2h
Mov ax,1+2	            0003h
Mov ax,3*5        	    000Fh
Mov ax,13/2	            0006h
Mov ax ,3+4*2	        000Bh

3、建立源程序t213.asm

Data segment
	X1 db 1
	X2 dw 2
	X3 equ 100
Data ends
Stack segment para stack
	Db 10 dup(0)
Stack ends
Code segment
	Assume cs:code,ds:data,ss:stack
Start: 	mov ax,data
 		Mov ds,ax
		Mov al,x1
		Mov ax,x2
		Mov al,x2
		Mov ax,x1
		Mov al,x3
		Mov ax,x3
Code ends
End start

该程序编译后有什么问题?如何修改?x1、x2、x3有何不同?

编译后出现warning信息,mov al,x2 和 mov ax,x1出现操作类型不匹配,即不能出现将x2字放到字节中(al中),x1字节放入AX中。
改为mov ax,x2和mov al,x1就可以了

4、建立t214.asm

Data segment
	X1 db 1,2,3,4,5,6
	X2 dw 7,8,9
	num equ x2-x1
	num1 equ $-x2
	a=x1+3
	b equ x1[si]
	c equ x2+1
Data ends
Stack segment para stack
	Db 10 dup(0)
Stack ends
Code segment
	Assume cs:code,ds:data,ss:stack
Start: 	Mov ax,data
    	Mov ds,ax
 		Mov si,num-2
		Mov al,a
		Mov al,b
		Mov bx,c
		Mov al,x1[1]
		Mov ax,x2[1]
		Mov al,x1+2
		Mov ax,x2+2
		Mov di,num1-3
		Mov ax,x2[di]
Code ends
End start

编译连接后用debug调入内存

指令执行时相关寄存器都为什么值。进行验证

Mov ax,data		    运行后ax变为076Ah
Mov ds,ax		    运行后ds变为076Ah
Mov si,num-2		运行后si变为0004h
Mov al,a			运行后al变为04h
Mov al,b			运行后al变为05h
Mov bx,c			运行后bx变为0800h
Mov al,x1[1]		运行后al变为02h
Mov ax,x2[1]		运行后ax变为0800h
Mov al,x1+2		    运行后ax变为0803h
Mov ax,x2+2		    运行后ds变为0008h
Mov di,num1-3	    运行后di变为0003h
Mov ax,x2[di]		运行后ax变为0900h

使用t命令逐步验证结果正确。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柯糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值