🌻🌻🌻前言
✨你好啊,我是“ 怪& ”,是一名在校大学生哦。
🌍主页链接:怪&的个人博客主页
☀️博文主更方向为:课程学习知识、作业题解、期末备考。随着专业的深入会越来越广哦…一起期待。
❤️一个“不想让我曾没有做好的也成为你的遗憾”的博主。
💪很高兴与你相遇,一起加油!
如果对汇编指令不太熟悉的话可以看我这篇文章:【汇编语言实战】(一)、第一次实验敲出的代码与常用指令解释(汇编语言第4版,王爽,超详细笔记)
一、题目
- 实验内容:编写一程序计算表达式w=v-(x+y+z-51)的值。
- 实验要求:
1、变量x,y,z,v,的值是存储器的数字;
2、会用debug在调试中,修改变量x,y,z,v的值;
3、计算的结果保存在变量w中,初始值为0。
二、代码
注:汇编语言编程不区分大小写
DATAS SEGMENT
x DW 5 ;设变量并赋初值
y DW 5
z DW 5
v DW 5
W DW 0
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV CX,0 ;CX=0
MOV AX,X ;AX=X
ADD AX,Y ;AX=X+Y
ADD AX,Z ;AX=X+Y+Z
SUB AX,51 ;AX=X+Y+Z-51
MOV BX,V ;BX=V
SUB BX,AX ;BX=V-(X+Y+Z-51)
MOV CX,BX ;CX=V-(X+Y+Z-51)
MOV W,CX ;W=V-(X+Y+Z-51)
MOV AH,4CH
INT 21H
CODES ENDS
END START
三、运行流程图
1、不改xyzv初值的运算
运算结果分析:
- w=v-(x+y+z-51)将x=y=z=v=5带入得,w=41
- 由于将w值存入CX,CX最后等于0029,十六进制的0029转化为十进制2*16+9=41
- 所以结果计算正确
2、修改xyzv初值的运算
注:是在执行(下述代码作用:即初始化变量)
MOV AX,DATAS
MOV DS,AX
后紧接着执行(下述代码作用:修改变量的值)
-e 143f:0 0 0 0 0
实验结果分析:
- 将x=y=z=v=0, w=v-(x+y+z-51)带入得,w=51
- 运行结果w=CX=0033,十六进制的0033转化为十进制为:3*16+3=51
- 所以计算正确
四、变量的理解
以不改变初值的运算为例:
其在上述已给的四个图后仍有一个图:
-
数据寄存器 DS=143F
-
代码中设置的变量:X,Y,Z,V,W依次存储在143F:00开始的内存中
-
存储遵循“高位村高位,低位存低位”
-
DW:字,DB:字节;一个字为两个字节,143D:0000为一个字节
例如:
143F:0000存的05,143F:0001存的00,合起来即存的为0005即第一个变量X的初始值5
143F:0002存的05,143F:0003存的00,合起来即存的为0005即第一个变量Y的初始值5
依次类推
所以我们可以通过下述代码,分别来改变X,Y,Z,V的值
-e 143f:0 0 0 0 0