汇编语言 第三版
- 格式:doc
- 大小:37.50 KB
- 文档页数:3
汇编语言第三版课程设计一、设计目的和意义汇编语言是计算机科学中必备的基础知识,通过学习汇编语言可以深入理解计算机硬件的运作机理和指令的执行过程,为高级编程语言的学习奠定了坚实的基础。
本次课程设计旨在实现一个简单的汇编程序,通过实践操作、编写程序来掌握汇编语言的基本知识和操作。
二、设计内容1. 思路概述本次课程设计实现一个简单的汇编程序,包括以下3个模块:1.输入模块:通过用户输入来获取数据,包括运算符、操作数等;2.运算模块:对输入的数据进行处理,并输出运算结果;3.输出模块:将结果输出到屏幕上。
2. 输入模块设计1.定义变量:input db 10 ; 输入的运算符或操作数len db 0 ; 记录输入的运算符或操作数的长度2.获取用户输入:mov ah, 00hint 16h ; 等待用户输入的运算符或操作数mov [input+len], alinc len3. 运算模块设计1.定义变量:num1 db 0 ; 存放第一个操作数num2 db 0 ; 存放第二个操作数operator db 0 ; 存放运算符result db 0 ; 存放运算结果2.提取运算符和操作数:mov si, lenmov ah, 0mov [operator], byte[input]add si, 1mov al, byte [input+1]sub al, '0'mov [num1], aladd si, 1mov al, byte [input+2]sub al, '0'mov [num2], al3.进行运算:cmp [operator], '+'je addcmp [operator], '-'je subadd:mov al, [num1]add al, [num2]mov [result], aljmp donesub:mov al, [num1]sub al, [num2]mov [result], aldone:4. 输出模块设计mov ah, 02h ; 设置字符属性mov dl, [result] ; 输出计算结果add dl, '0'int 21h ; 输出结果三、总结本次课程设计通过实现一个简单的汇编程序,掌握了汇编语言的基本知识和操作。
·汇编语言是一种符号编程语言,这些符号构成汇编指令或伪指令,汇编语言程序就是由指令和伪指令构成的。
·汇编语言指令的一般格式:[名字][操作码][操作码][操作数][注释]·CPU:CPU是执行程序的部件。
·内存:RAM是存储程序和数据的部件。
·CS,DS,ES,SS寄存器的功能:段寻址寄存器。
·子程序的作用:把多次引用的相同程序段编成一个独立的程序段,当需要执行这个程序段的时候,可以用Call指令调用。
·BIOS屏幕控制、键盘控制、鼠标控制的中断调用分别是:int 10h int 16h int 33h。
·DOS int 21提示一个字符串:AH=09H。
·打开和关闭扬声器的指令:MOV AL,11B OUT 61H,AL和MOV AL,00 OUT 61H,AL.入栈和出栈的指令格式:PUSH ...16位寄存器和pop (16)位寄存器·数据总线的多少取决于内存单元的大小,地址总线的多少取决于内存单元的多少。
·如果在汇编语言源程序中需要多次用到同一段程序,则可以将这段程序定义成一条指令,称为宏指令,一个宏定义包含3个部分,宏名、宏伪指令和宏体,宏是汇编语言的一个特点,避免了代码的重复,并使源程序简洁易读。
①DATA SEGMENTBUF DB 'HelloWorld ! This is ASM program.$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA DX,BUF MOV AH,09 INT 21HMOV AH,4CHINT 21H CODE ENDS END START②line macro x1,y1,x2,y2,color local xian1,l1,l2mov cx,x1mov dx,y1mov ah,0chmov al,color;0fhmov bh,0xian1:int 10hpush cxmov cx,9999loop $pop cxcmp cx,x2je l1inc cxcmp cx,x2jne xian1l1:cmp dx,y2je l2inc dxcmp dx,y2jne xian1l2:inc dxendmcodes segmentstart:mov ah,0mov al,12hint 10hmov ah,0bhmov bh,0mov bl,3int 10h;---------------line 200,20,400,50,0fh ;-------------------line 400,20,400,250,0fh ;-------------------line 200,250,400,250,0fh ;--------------------- line 200,20,200,250,0fh mov ah,07hint 21hmov ah,4chint 21hcodes endsend start。
王爽《汇编语⾔》(第三版)实验10解析1、显⽰字符串assume cs:codedata segmentdb 'welcome to masm!',0data endscode segmentstart: mov dh,8mov dl,3mov cl,2mov ax,datamov ds,axmov si,0call show_strmov ax,4c00hint 21hshow_str: push dxpush cxpush si ; 保护⼦程序寄存器中⽤到的寄存器; 由于主程序的限定; 这⾥由CPU⾃动为我们分配栈空间mov di,0 ;显⽰缓存区中的偏移量mov bl,dhdec bl ; bl-1才是真正的⾏,因为⾏号从0开始计数mov al,160mul bl ; 每⾏160字节⽤⾏数*每⾏偏移量得到⽬标⾏的偏移量mov bx,ax ; mul bl之后,乘积存储在ax中,这⾥要转存⼊bx中mov al,2 ; 列的偏移量为2,两个字节代表⼀列!!!mul dl ; 与⾏偏移量同理add bl,al ;将列偏移量与⾏偏移量相加,得到指定位置的偏移量。
mov ax,0b800hmov es,ax ;指定显⽰缓存区的内存位置mov al,cl ; 由于后⾯jcxz语句的判断要⽤到cx,所以我们要将; cl(颜⾊)先存下来。
s: mov ch,0mov cl,ds:[si] ;⾸先将当前指向字符串的某个字符存⼊cx中jcxz ok ; 如果cx为0,则转移到ok标号执⾏相应代码mov es:[bx+di],cl ;将字符传⼊低地址mov es:[bx+di+1],al ; 将颜⾊传⼊⾼地址add di,2 ; 列偏移量为2inc si ; 字符串的偏移量为1loop s ; 不为0,继续复制ok: pop dxpop cxpop si ; 还原寄存器变量ret ; 结束⼦程序调⽤code endsend start2、解决除法溢出的问题这⾥要注意,把⼀个数放在了dx,⾼位寄存器中,那么就相当于65536。
计算机组成原理与汇编语言程序设计第3版课程设计
一、设计背景及目的
计算机组成原理是计算机科学与技术专业中的一门重要课程,它涵盖了现代计算机系统各个方面的基础知识。
本课程设计旨在加深学生对计算机组成原理和汇编语言程序设计的理解和应用,为学生深入学习计算机科学与技术专业课程奠定坚实的基础。
二、设计内容
本课程设计主要包括以下内容:
1. 实验目的
本实验的主要目的是通过计算机组成原理和汇编语言程序设计的实践操作,加深学生对计算机系统各个方面基础知识的理解和应用。
2. 实验内容
本实验的具体内容包括以下几个部分:
(1)计算机系统基础知识
介绍计算机系统的组成及其基本原理,掌握计算机系统的硬件和软件结构以及它们之间的关系。
(2)汇编语言程序设计基础知识
介绍汇编语言程序设计的基础知识,理解汇编语言程序的组成和运行过程,熟悉常用的汇编语言指令。
1。
汇编语言程序设计教程(第3版)习题参考答案第1章汇编语言基础知识思考与练习1.计算机系统分哪几个层次?简述计算机系统的硬件结构。
1)数字逻辑层2) 微体系结构层3) 指令系统层4) 操作系统层5) 汇编语言层6) 高级语言层7) 应用层硬件系统是指构成计算机系统的物理实体或物理装置。
它由控制器、运算器、存储器、输入设备和输出设备等部件构成。
2.简述用汇编语言进行程序设计的必要性。
1)程序要具有较快的执行时间,或者只能占用较小的存储容量。
例如,操作系统的核心程序段,实时控制系统的软件,智能仪器仪表的控制程序等。
2)程序与计算机硬件密切相关,程序要直接、有效地控制硬件。
例如,I/O接口电路的初始化程序段,外部设备的低层驱动程序等。
3)大型软件需要提高性能、优化处理的部分。
例如计算机系统频繁调用的子程序、动态连接库等。
4)没有合适的高级语言或只能采用汇编语言的时候。
例如,开发最新的处理器程序时,暂时没有支持新指令的编译程序。
5)汇编语言还有许多实际应用,例如分析具体系统尤其是该系统的低层软件、加密解密软件、分析和防治计算机病毒等。
3.汉字编码主要分哪几类?每类的功能如何?汉字编码主要分为四类:汉字输入码、汉字交换码、汉字机内码和汉字字形码。
1)为了能直接使用西文标准键盘进行输入,就必须为汉字设计相应的编码方法,即用西文标准键盘上的字母数字串表示汉字的编码。
目前,汉字输入编码方法主要有三种:数字编码、拼音编码和字形编码。
2)汉字交换码:在不同汉字信息处理系统间进行汉字交换时所使用的编码,就是国标码。
无论采用哪种方法输入汉字,一旦输入到计算机中,必须采用统一的国标码标识每个汉字。
3)汉字机内码是汉字在设备或信息处理系统内部最基本的表达形式,是在设备和信息处理系统内部存储、处理、传输汉字用的编码。
4)字形编码也称为字模码,是用点阵表示的汉字字形代码,它是汉字的输出形式。
4.计算机的字长是怎么定义的,试举例说明。
汇编语言王爽第三版检测点答案带目录在学习汇编语言的过程中,王爽老师的《汇编语言(第三版)》无疑是一本备受推崇的经典教材。
而对于学习者来说,检测点的答案能够帮助我们更好地巩固知识,查漏补缺。
接下来,我将为大家详细呈现这本教材中各个章节检测点的答案,并附上清晰的目录,方便大家查阅和学习。
第一章基础知识检测点 11(1)1 个 CPU 的寻址能力为 8KB,那么它的地址总线的宽度为。
答案:13 位。
因为 8KB = 8×1024 = 2^13B,所以地址总线的宽度为 13 位。
检测点 12(1)8086 CPU 有根数据总线。
答案:16 根。
(2)8086 CPU 有根地址总线。
答案:20 根。
检测点 13(1)内存地址空间的大小受的位数决定。
答案:地址总线。
(2)8086 CPU 的地址总线宽度为 20 位,其可以寻址的内存空间为。
答案:1MB。
因为 2^20 = 1048576B = 1MB。
第二章寄存器检测点 21(1)写出每条汇编指令执行后相关寄存器中的值。
mov ax,62627 AX = 62627mov ah,31H AH = 31H,AX = 31627mov al,23H AL = 23H,AX = 3123H检测点 22(1)给定段地址为 0001H,仅通过变化偏移地址寻址,CPU 的寻址范围为到。
答案:00010H 到 1000FH。
(2)有一数据存放在内存 20000H 单元中,现给定段地址为 SA,若想用偏移地址寻到此单元。
则 SA 应满足的条件是:最小为,最大为。
答案:最小为 1001H,最大为 2000H。
第三章内存访问检测点 31(1)下面的程序实现依次用内存 0:0~0:15 单元中的内容改写程序中的数据。
完成程序。
assume cs:codesgcodesg segmentdw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987Hstart: mov ax,0mov ds,axmov bx,0mov cx,8s: mov ax,bxmov bx+16,axadd bx,2loop smov ax,4c00hint 21hcodesg endsend start检测点 32(1)下面的程序将“Mov ax,4c00h ”之前的指令复制到内存 0:200 处。
汇编语言第三版习题答案汇编语言是一种低级编程语言,它允许程序员直接控制计算机硬件。
第三版通常指的是某本汇编语言教材的修订版,其中习题答案对于学习者来说非常重要,因为它们可以帮助理解概念并验证自己的编程技能。
在汇编语言的学习过程中,习题通常包括指令集的使用、程序设计、寄存器操作、内存管理、中断处理等。
以下是一些可能的习题答案示例,但请注意,这些答案需要与具体的习题相匹配,并且可能因教材版本和习题内容的不同而有所变化。
示例习题答案习题1:编写一个汇编程序,将AX寄存器的值加1。
答案:```INC AX```习题2:编写一个程序段,将DX寄存器的值移动到AX寄存器。
答案:```MOV AX, DX```习题3:假设有一个数组存储在内存中,数组的起始地址为DS:BX,数组元素为16位整数,编写一个程序段,将数组的第一个元素加到AX 寄存器。
答案:```MOV AX, [BX] ; 将数组的第一个元素移动到AXADD AX, [BX] ; 将数组的第一个元素加到AX```习题4:编写一个程序,实现对一个字符串的逆序存储。
答案:```; 假设字符串以0结尾,存放在内存中,DS:SI指向字符串的起始地址MOV CX, 0 ; 初始化计数器LODSW ; 将字符串的一个字节加载到AX中CMP AX, 0 ; 检查是否为字符串的结束字符JE END_REVERSE ; 如果是,则跳转到结束标签PUSH AX ; 将当前字符压入堆栈INC CX ; 增加计数器JMP SHORT LODSW ; 继续加载下一个字符END_REVERSE:; 现在堆栈中存储了逆序的字符,将它们重新存储到内存中MOV BX, CX ; 将计数器的值移动到BX中MOV CX, BX ; 将BX的值再次移动到CX中,用于字符串的逆序输出POP AX ; 从堆栈中弹出字符STOSW ; 将字符存储到内存中LOOP END_REVERSE ; 重复直到CX为0```习题5:编写一个程序,计算AX寄存器中值的平方。
汇编语⾔(王爽第三版)实验5编写、调试具体多个段的程序实验5 编写、调试具体多个段的程序⼀。
将下⾯的程序编译连接,⽤Debug加载、跟踪,然后回答问题。
assume cs:code,ds:data,ss:stackdata segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hdata endsstack segmentdw 0,0,0,0,0,0,0,0stack endscode segmentstart: mov ax,stackmov ss,axmov sp,16mov ax,datamov ds,axpush ds:[0]push ds:[2]pop ds:[2]pop ds:[0]mov ax,4c00hint 21hcode endsend start程序分析:由于是初次接触,我们逐步讲解,废话多点。
(1)此程序考察的是内存中数据段和栈段的定义。
程序共定义了1个数据段,data段,⾸先明确,在程序运⾏开始(标号start处),这个数据段就已经被定义好了,并且分配了内存空间,并赋值了。
⼀个栈段,stack。
同理这个数据段在没有被⼈⼯定义为栈结构时,也被定义好了。
并且分配了内存空间,并赋值了。
将此程序编译并连接后,使⽤debug调试,(这⾥需要注意,以下的段地址可能由于系统不同⽽有差异,主要是理解概念。
)E:\assembly>debug eee.exe-rAX=0000 BX=0000 CX=0042 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=0B55 ES=0B55 SS=0B65 CS=0B67 IP=0000 NV UP EI PL NZ NA PO NC0B67:0000 B8660B MOV AX,0B66程序分析:我们什么也没执⾏,此时我们在data段定义的数据在哪?在ds:0100H处(原来讲过,程序最开始时ds:00~ds:100H是留给程序与操作系统通讯使⽤的psp内存段,参见书中p92);也就是说我们在ds:100H、0B55:100H或0B65:00处可以看见这些定义的数据。
汇编语言习题答案第三版汇编语言习题答案第三版汇编语言作为计算机科学中的一门重要课程,对于理解计算机底层原理和编程语言有着重要的意义。
而在学习汇编语言的过程中,习题的完成是提高对知识掌握程度的重要途径。
本文将为读者提供一些汇编语言习题的解答,希望能够帮助读者更好地理解和应用汇编语言。
1. 以下是一段汇编代码,请问这段代码的功能是什么?```MOV AX, 5MOV BX, 3ADD AX, BX```答案:这段代码的功能是将寄存器AX中的值设置为5,将寄存器BX中的值设置为3,然后将AX和BX的值相加,结果保存在AX中。
2. 以下是一段汇编代码,请问这段代码的功能是什么?```MOV AL, 0MOV CX, 10LOOP_START:ADD AL, 1LOOP LOOP_START```设置为10。
然后通过循环,将AL的值逐步增加1,循环执行10次。
3. 以下是一段汇编代码,请问这段代码的功能是什么?```MOV AX, 10CMP AX, 5JG LABEL1JMP LABEL2LABEL1:ADD AX, 5LABEL2:SUB AX, 3```答案:这段代码的功能是将寄存器AX中的值设置为10,然后与5进行比较。
如果AX的值大于5,则跳转到LABEL1处执行,否则跳转到LABEL2处执行。
在LABEL1处,将AX的值增加5;在LABEL2处,将AX的值减去3。
4. 以下是一段汇编代码,请问这段代码的功能是什么?```MOV AX, 5MOV BX, 3MUL BX```置为3。
然后使用MUL指令,将AX的值与BX的值相乘,结果保存在AX中。
5. 以下是一段汇编代码,请问这段代码的功能是什么?```MOV AX, 10MOV BX, 2DIV BX```答案:这段代码的功能是将寄存器AX中的值设置为10,将寄存器BX中的值设置为2。
然后使用DIV指令,将AX的值除以BX的值,商保存在AX中,余数保存在DX中。
汇编语言王爽第三版检测点答案带目录一、前言在学习汇编语言的过程中,王爽老师的《汇编语言》第三版是一本备受推崇的教材。
为了帮助大家更好地掌握这门语言,下面将为大家提供一份详细的检测点答案,并附上目录,以便大家能够快速找到所需内容。
二、目录1、基础知识11 数制与编码12 内存地址空间2、寄存器21 通用寄存器22 段寄存器3、指令系统31 数据传送指令32 算术运算指令33 逻辑运算指令34 转移指令4、内存寻址41 直接寻址42 寄存器间接寻址43 基址变址寻址44 相对基址变址寻址5、程序设计51 顺序程序设计52 分支程序设计53 循环程序设计6、中断与 BIOS 调用61 中断概念62 BIOS 调用三、检测点答案1、基础知识11 数制与编码检测点 11:将十进制数 123 转换为十六进制数。
答案:7B检测点 12:已知一个字节的二进制数为 10101100,求其对应的十进制数。
答案:17212 内存地址空间检测点 13:若内存地址从 0000H 到 7FFFH,其存储容量是多少?答案:32KB检测点 14:内存地址空间中,某段地址范围为 2000H 2FFFH,该段地址空间有多少字节?答案:4KB2、寄存器21 通用寄存器检测点 21:在 8086 CPU 中,AX 寄存器可以分为哪两个 8 位寄存器?答案:AH 和 AL检测点 22:已知 AX = 1234H,BX = 5678H,执行 ADD AX, BX 后,AX 的值是多少?答案:68ACH22 段寄存器检测点 23:CS 寄存器的作用是什么?答案:CS 寄存器用于存放代码段的段地址。
检测点 24:若代码段的段地址为 1000H,偏移地址为 2000H,那么物理地址是多少?答案:12000H3、指令系统31 数据传送指令检测点31:MOV AX, 1000H 指令执行后,AX 寄存器的值是多少?(假设内存单元 1000H 的值为 5678H)答案:5678H检测点 32:已知 AX = 1234H,BX = 5678H,执行 MOV 2000H, AX 后,内存单元 2000H 的值是多少?答案:1234H32 算术运算指令检测点 33:若 AX = 1000H,BX = 2000H,执行 ADD AX, BX 后,AX 和 CF 的值分别是多少?答案:AX = 3000H,CF = 0检测点 34:已知 AX = 5678H,执行 INC AX 后,AX 的值是多少?答案:5679H33 逻辑运算指令检测点 35:若 AX = 1234H,执行 AND AX, 0F0FH 后,AX 的值是多少?答案:0204H检测点 36:已知 AX = 5678H,执行 OR AX, 0F000H 后,AX 的值是多少?答案:5678H | 0F000H = 5F78H34 转移指令检测点 37:JMP 指令有几种跳转方式?答案:无条件跳转和条件跳转。
《汇编语⾔(第三版)》cmp指令cmp指令本质cmp是⽐较指令,cmp的功能相当于减法。
格式cmp 操作对象1,操作对象2功能计算操作对象1-操作对象2,但并不保存结果,可以根据flag标志寄存器来判断结果。
正向判断如果(ax) = (bx) 则(ax)-(bx) = 0,所以:zf=1。
如果(ax) != (bx) 则(ax)-(bx) != 0,所以:zf=0。
如果(ax) < (bx) 则(ax)-(bx)将产⽣借位,所以:cf=1。
如果(ax) >=(bx) 则(ax)-(bx)不产⽣借位,所以:cf=0。
如果(ax) > (bx) 则(ax)-(bx) != 0,也不产⽣借位,所以:zf=cf=0。
如果(ax) <=(bx) 则(ax)-(bx)可能为0,也可能产⽣借位,所以:zf=1或zf=1。
(1、3起码满⾜⼀个)反向判断指令cmp ax,bx 的逻辑含义是⽐较ax和bx的值,如果执⾏后:1. zf=1 ===> (ax)=(bx)2. zf=0 ===> (ax)!=(bx)3. cf=1 ===> (ax)<(bx)4. cf=0 ===> (ax)>=(bx)5. cf=zf=0 ===> (ax)>(bx)6. cf=1或zf=1 ===> (ax)<=(bx)如何记忆?1. zf是0标志寄存器,zf=1时,ax=bx;zf=0时,ax != bx。
2. cf是进位借位标志寄存器,cf=1时,ax<bx;cf=0时,ax>=bx。
3. 根据1、2组合可以推出另外两个。
CMP指令如何起作⽤?cmp指令的⽐较结果需要通过条件转移指令来检测。
指令解释含义检测的相关标志位je e:equal等于则转移zf=1jne ne:not equal不等于则转移zf=0jb b:below低于则转移cf=1jnb nb:not below不低于则转移cf=0ja a:above⾼于则转移cf=0且zf=0jna na:not above不⾼于则转移cf=1或zf=1。
汇编语言程序设计教程第三版教学设计1. 教学目标本课程旨在通过系统的讲解,使学生掌握汇编语言程序设计的基础知识和技能,并能够独立设计和编写汇编语言程序,具备运用汇编语言解决实际问题的能力。
2. 教学内容2.1 汇编语言基础1.汇编语言的概念与特点2.汇编语言的基本语法规则3.汇编语言的数据类型4.汇编语言的指令格式2.2 汇编语言程序设计1.程序设计初步2.数据的输入与输出3.程序结构和逻辑控制4.子程序的设计和调用5.汇编语言与C语言的混合编程2.3 汇编语言的应用1.汇编程序的调试方法与工具2.汇编语言在嵌入式系统中的应用3.汇编语言在计算机系统维护和优化中的应用3. 教学方法本课程采用课堂讲授、案例授课和实验教学相结合的教学方法。
具体来说,教学过程中将以案例为基础,从实践中抽象出汇编程序设计的基本思路和方法,同时辅之以理论知识的讲解和实验操作的练习。
在实验课中,学生将会亲自动手编写汇编语言程序并进行调试,加深对理论知识和实际操作的理解和掌握。
4. 教学评估本课程的教学评估将采用多元化的方式,以全面评价学生的学习效果。
具体来说,将采用以下方式:1.课堂提问:课堂提问将用于检测学生对教学内容的掌握程度和理解深度;2.实验报告:实验报告将评估学生在实践中运用汇编语言解决问题的能力;3.综合测试:综合测试将评估学生对教学内容的全面掌握程度,包括汇编语言基础知识、程序设计能力和应用能力等方面。
5. 实验设计5.1 实验目的通过实验操作,让学生具备汇编语言程序设计能力,能够独立完成各种汇编程序的设计、编写、调试和优化。
5.2 实验内容1.汇编语言程序设计的基本流程:程序设计、编写、调试、优化;2.数据的输入与输出:键盘输入、屏幕输出、文件读写等;3.程序结构和逻辑控制:循环、判断、跳转等;4.子程序的设计和调用:过程、函数、中断;5.汇编语言与C语言的混合编程:调用C函数和库函数,实现高级功能。
5.3 实验要求1.学生独立完成实验任务,掌握汇编语言程序设计的基本方法和技能;2.学生能够自主设计、编写和调试汇编程序,解决实际问题;3.学生能够熟练掌握常见的汇编语言调试工具,并能够使用它们进行程序的调试和优化。
王爽汇编语⾔(第三版)环境搭建(附PDF及⼯具下载)⼀、前⾔最近在学习汇编语⾔,使⽤的是读者评价⾮常⾼的王爽⽼师写的《汇编语⾔》(第三版),为了适应现在各个版本的windows操作系统,所以采⽤VMWare虚拟机来搭建纯DOS环境。
⼆、需要的⼯具VMware-workstation-12、DOS系统镜像⽂件、汇编编译器masm和连接器link2020-02-17 更新百度云链接链接:https:///s/1Ic3J8zZ8h0CctoWS-xFflg提取码:ggww三、安装VMware-workstation-12傻⽠式安装,⼀直点击下⼀步就可以(虽然⽹上也可以搜到注册码,请⽀持正版)。
四、搭建DOS编译环境(1)启动虚拟机,选择“创建新的虚拟机”;(2)选择“典型”,下⼀步;“稍后安装操作系统”,下⼀步;(3)在客户机操作系统中选择“其他”,在版本中选择“MS-DOS”,下⼀步;(4)选择虚拟机名和安装位置,下⼀步;(5)使⽤默认设置,下⼀步。
完成;(6)右键刚刚新建的虚拟机,选择“设置”。
(7)在“硬件”中点击CD/DVD,在右侧选择“使⽤ISO镜像⽂件”,点击浏览找到下载的dos71scd解压后的⽂件夹,⾥⾯有DOS的安装镜像,选择,点击打开,然后确定。
(8)开启虚拟机(9)说⼀下VMWare的基本操作,⿏标在虚拟机中操作时,如果想切换到本⾝的操作系统,需要按CTRL+ALT。
启动后会显⽰如下界⾯,按回车;(10)全部使⽤默认设置,⼀路“Next”,然后选择“Reboot now”重启虚拟机。
(12)重启后会提⽰invalid system disk,这是BIOS启动设置的问题,按CTRL+ALT+INSERT重启虚拟机,在开始VMWARE的LOGO处按F2(把握好时间,多试⼏次),进⼊BIOS设置,向右键(→)切换到Boot栏,向下键(↓)选择到CD-ROM Drive(变⽩即为选中),然后按SHIFT和加号(+),将其移动到最顶端。
汇编语⾔(王爽第三版)实验3编程、编译、连接、跟踪实验3 编程、编译、连接、跟踪(1)将下⾯的程序保存为t1.asm⽂件,将其⽣产可执⾏⽂件t1.exe。
assume cs:codesgcodesg segmentmov ax, 2000Hmov ss, axmov sp, 0add sp, 10pop axpop bxpush axpush bxpop axpop bxmov ax, 4C00Hint 21Hcodesg endsend(2)⽤debug跟踪t1.exe的执⾏过程,写出每⼀步骤执⾏后,相关寄存器中的内容和栈顶的内容。
(3)PSP的头两个字节是CD 20,⽤debug加载t1.exe,查看PSP的内容。
实验结果:【1】编译、连接t1.asm汇编源程序。
1)在windows XP中,打开cmd窗⼝,编译t1.asm程序。
如下图:E:\assembly>masm t1.asmMicrosoft (R) MASM Compatibility DriverCopyright (C) Microsoft Corp 1993. All rights reserved.Invoking: ML.EXE /I. /Zm /c /Ta t1.asmMicrosoft (R) Macro Assembler Version 6.15.8803Patched for you by promethee [ECL] in the year 2001 - enjoyCopyright (C) Microsoft Corp 1981-2000. All rights reserved.Assembling: t1.asm如果没有任何错误,编译器会⽣成⼀个t1.obj的⽂件。
如果有语法等严重的错误,编译器会给出错误信息,你可以根据错误信息,修改源代码相关的⾏。
连接这个obj⽂件,并⽣成t1.exe⽂件:如下图:E:\assembly>link t1.objMicrosoft (R) Segmented Executable Linker Version 5.60.339 Dec 5 1994Copyright (C) Microsoft Corp 1984-1993. All rights reserved.Run File [t1.exe]: t1.exeList File [nul.map]:Libraries [.lib]:Definitions File [nul.def]:LINK : warning L4021: no stack segmentLINK : warning L4038: program has no starting address连接讲解:1)其中运⾏⽂件:我们输⼊我们将要⽣成的可执⾏程序(例如.exe)⽂件的名称。
·汇编语言是一种符号编程语言,这些符号构成汇编指令或伪指令,汇编语言程序就是由指令和伪指令构成的。
·汇编语言指令的一般格式:[名字][操作码][操作码][操作数][注释]
·CPU:CPU是执行程序的部件。
·内存:RAM是存储程序和数据的部件。
·CS,DS,ES,SS寄存器的功能:段寻址寄存器。
·子程序的作用:把多次引用的相同程序段编成一个独立的程序段,当需要执行这个程序段的时候,可以用Call指令调用。
·BIOS屏幕控制、键盘控制、鼠标控制的中断调用分别是:int 10h int 16h int 33h。
·DOS int 21提示一个字符串:AH=09H。
·打开和关闭扬声器的指令:MOV AL,11B OUT 61H,AL和MOV AL,00 OUT 61H,AL
.入栈和出栈的指令格式:PUSH ...16位寄存器和pop (16)
位寄存器
·数据总线的多少取决于内存单元的大小,地址总线的多少取决于内存单元的多少。
·如果在汇编语言源程序中需要多次用到同一段程序,则可以将这段程序定义成一条指令,称为宏指令,一个宏定义包含3个部分,宏名、宏伪指令和宏体,宏是汇编语言的一个特点,避免了代码的重复,并使源程序简洁易读。
①
DATA SEGMENT
BUF DB 'HelloWorld ! This is ASM program.$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
LEA DX,BUF MOV AH,09 INT 21H
MOV AH,4CH
INT 21H CODE ENDS END START
②
line macro x1,y1,x2,y2,color local xian1,l1,l2
mov cx,x1
mov dx,y1
mov ah,0ch
mov al,color;0fh
mov bh,0
xian1:int 10h
push cx
mov cx,9999
loop $
pop cx
cmp cx,x2
je l1
inc cx
cmp cx,x2
jne xian1
l1:cmp dx,y2
je l2
inc dx
cmp dx,y2
jne xian1
l2:inc dx
endm
codes segment
start:
mov ah,0
mov al,12h
int 10h
mov ah,0bh
mov bh,0
mov bl,3
int 10h
;---------------
line 200,20,400,50,0fh ;-------------------
line 400,20,400,250,0fh ;-------------------
line 200,250,400,250,0fh ;--------------------- line 200,20,200,250,0fh mov ah,07h
int 21h
mov ah,4ch
int 21h
codes ends
end start。