目录
一、实验目的
二、实验内容
三、实验步骤以及结果
1、阅读第4页ppt 第一个汇编程序 ex1.asm 并编写编译执行成功后,要求改写,使其输出字符ABC,如下图所示。
(1)编译产生目标文件
(2)链接,产生可执行文件
(3)现在要实现第一题。
2、回答下列问题
1)该程序定义了几个段?
2)assume 伪指令的作用是什么?
3)第18行 end begin 是什么意思?
4)利用debug工具,查看数据段内容
5) 试试将第2行 改为
mess db ‘hello$World!’,0DH, 0AH, 24H 和
mess db ‘hello World!’,24h
观察执行结果有什么不同?0DH, 0AH, 24H 分别为什么字符的ascii码,有何作用?
6)改写,在hello,world 后要再要输出一行英文自我介绍 该如何做到?请改成程序并运行。
四、实验结果与分析
五、实验总结
-
一、实验目的
- 熟悉汇编程序的组成结构
- 掌握汇编语言的编写、调试、运行的整个过程
-
二、实验内容
1、阅读第4页ppt 第一个汇编程序 ex1.asm 并编写编译执行成功后,要求改写,使其输出字符ABC,如下图所示
*选作,改成自己的学号输出
2. 阅读并执行下方程序,并回答如下问题:
1) 该程序定义了几个段?
2) assume 伪指令的作用是什么?
3) 第18行 end begin 是什么意思?
4) 利用debug工具,查看数据段内容
5) 试试将第2行 改为
mess db ‘hello$World!’,0DH, 0AH, 24H 和
mess db ‘hello World!’,24h
观察执行结果有什么不同?0DH, 0AH, 24H 分别为什么字符的ascii码,有何作用?
6) 改写,在hello,world 后要再要输出一行英文自我介绍 该如何做到?请改成程序并运行。
-
三、实验步骤以及结果
-
1、阅读第4页ppt 第一个汇编程序 ex1.asm 并编写编译执行成功后,要求改写,使其输出字符ABC,如下图所示。
(1)编译产生目标文件
上述问题是因为我把filename存为了txt文件,解决方法:打开记事本,点击左上角文件,点击另存为。
修改文件名为filename.asm文件即可。似乎修不修改保存类型无关紧要。
最终结果:
现在对了:
(2)链接,产生可执行文件
原来的程序的结果
下面把end start2改为end start。但结果不符合预期。
理论依据:Int 21h为中断,mov ah,4ch为返回主函数,mov ah,2为所在函数输出一个字符。
推测仅修改.asm文件还不够,上面的操作还要再执行一遍。
的确如此。
(3)现在要实现第一题。
代码修改如下:
输出结果如下:
顺利完成。
注:如果.asm文件有错误,是不会生成.obj文件的,必须改正所有错误后才能往下进行,不然输出还是原先的.obj文件的结果或者不输出。
2、回答下列问题
最终结果如下:
特别提醒:记事本害人,18行的程序我敲错了两个地方,改了半个小时。
1)该程序定义了几个段?
3个段,分别为DSEG,SSEG,CSEG。
2)assume 伪指令的作用是什么?
明确段和段寄存器之间的关系。
3)第18行 end begin 是什么意思?
可执行程序从begin第一次出现的位置开始。
4)利用debug工具,查看数据段内容
5) 试试将第2行 改为
mess db ‘hello$World!’,0DH, 0AH, 24H 和
mess db ‘hello World!’,24h
观察执行结果有什么不同?0DH, 0AH, 24H 分别为什么字符的ascii码,有何作用?
原结果。
到o被截断了。
缺换行。
0DH为回车键,0AH为换行键,24H为$,有截断的作用。
下面是回车与换行的区别——引自文心一言
回车和换行是两个不同的概念,虽然在现代计算机中,它们经常一起使用以实现文本行的结束,但它们在起源和功能上有所区别。
回车(Carriage Return,CR,'\r')和换行(Line Feed,LF,'\n')的概念起源于早期的打字机。回车是指将打印头(即打印字符的位置)移动到当前行的最左端,这样如果继续打印,新的字符会覆盖当前行的起始位置。而换行是指将纸张向下移动一行,以便在下一行开始新的打印。
在计算机系统中,这两个概念也有所不同。在Unix和Linux系统中,行尾通常只包含换行符(LF)。而在Windows系统中,行尾则由回车符(CR)和换行符(LF)两个字符组成。这种差异可能会导致在不同系统间打开文件时,文本的格式出现差异。例如,Unix/Mac系统下的文件在Windows里打开的话,所有文字可能会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。
在文本编辑器中,回车键(Enter键)通常被用来换行,但在表格中,它会导致光标跳到下一行的第一个单元格。而换行键(通常是Shift+Enter组合键)则只在文本编辑器中用来换行,不能在表格中使用。
6)改写,在hello,world 后要再要输出一行英文自我介绍 该如何做到?请改成程序并运行。
输出结果:
程序如下:
DSEG SEGMENT
MESS DB 'Hello,World!' ,0DH,0AH
DB 'My name is Zhang Jingsai.',24H
DSEG ENDS
SSEG SEGMENT PARA STACK
DW 256 DUP(?)
SSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
BEGIN: MOV AX,DSEG
MOV DS,AX
MOV DX,OFFSET MESS
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
CSEG ENDS
END BEGIN
注,第二三行也可以像这样合并为一行:
理论依据:P128例4.8指出,操作数也可以是字符串;同时每个操作数之间要用逗号隔开。
-
四、实验结果与分析
与第三部分合并。
-
五、实验总结
- 本次实验,目的基本完成。(除了选做)
- 成功运用记事本编辑位操作,并更深刻地认识到了从代码到可执行程序的全过程,当时学C语言时不明白,现在有点明白了。不过下次要用VScode写代码了,记事本害人。
- 明白了换行与回车的区别,终于明白两者是不一样的东西,不过是以前在Windous系统上用惯了,误认为回车就是换行。讲C语言、C++时老师都讲过,可惜没认真听。
- 没什么了,加油!