王爽汇编语言第五章学习笔记和实验四答案

本文介绍了汇编语言的基本概念,包括内存单元的表示方法、循环控制指令的使用技巧及数据处理注意事项。并通过具体编程实例展示了如何进行内存操作、循环控制及数据复制等常见任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Ds+偏移地址表示内存单元;
2.描述一个内存单元需要两种信息:(1)内存单元的地址;(2)内存单元的长度(数据类型);
3.定义描述性符号“()”来表示一个寄存器或一个内存单元中的内容,“()”中的元素可以有3种类型:a.寄存器名,b.段寄存器名,c.内存单元的物理地址(一个20位的数据),一般“()”内的数据类型有两种,具体是哪一种类型由寄存器或具体的运算决定;
4.一般情况下,常量必须卸载“[]”中;
5.loop指令执行的两个基本步骤:先对cx的值减去1,然后判定cx的值是不是为0,如果为0则向下继续执行,不为0则跳转至标号处;
6.在本书的汇编语言之中,一般一个标号代表一个地址;
7.cx和loop指令相互配合实现循环功能的3个要点:
(1)在cx中存放循环次数;
(2)loop指令中的标号所标识的地址要在前面;
(3)要循环执行的程序段,要写在标号和loop指令的中间。
8.关于乘法的一点小学阶段的理解:123*236,相当于123连续相加236次,所以编程的时候用的是add ax,123;
9.汇编语言之中,数据不能以字母开头,通常在字幕前面加0;
10.存放累加数据的时候一般考虑两个问题:是否溢出和数据长度是否匹配,如果不匹配需要哪一种寄存器来中转;
11.关于debug中p指令和G指令的说明,p指令通常一次性执行loop中的内容,而g指令可以看作类似于goto的跳转指令;
12.由于汇编的源程序和debug对于"[]"的数字的处理不同,因此为了统一,通常先将数据放入一个寄存器中,例如bx中,然后利用[bx]来访问内存单元;
例如:
mov al,[0] 与mov al,0相同
mov al,ds:[0] 将(al)=((ds)*16+0)的数据送人内存中
mov al,[bx] 将(al)=((ds)*16+bx)的数据送入al中
mov al,ds:[bx] 与mov al,[bx]相同。
13.关于段前缀的说明,例如下面内容:
mov ax,ds:[bx]
mov ax,cs:[bx]
mov ax,ss:[bx]
mov ax,es:[bx]
mov ax,ss:[0]
mov ax,cs:[0]
例如"[]"前面的"ds","es","ss","cs"就是段前缀,一般用来明确的指向一个内存单元。
14.写指令的时候尽量用一段安全的内存空间,具体做法是使用前可以用d命令查看该段内存空间是否为0,否则有可能引起调试出错;

实验4
1.编程,向内存0:200-0:23F依次传送数据0~63(3FH)。
assume cs:code
code segment
mov ax,0
mov ds,ax
mov bx,200h
mov cx,64
mov al,0
s:mov [bx],al
inc bx
inc al
loop s
mov ax,4c00h
int 21h
code ends
end
2.编程,向内存0:200-0:23F依次传送数据0~63(3FH),只能使用9条指令。
assume cs:code
code segment
mov ax,20h//换一种方法写段的起地址,为的是[bx]直接可以拿来用,而不用再次赋值或者清零
mov ds,ax
mov bx,0
mov cx,64
s:mov [bx],bl//用bl给bx赋值,可以看做是值的传递
inc bx//换成bl也可以
loop s
mov ax,4c00h
int 21h
code ends
end
3.补全下面的程序,其功能是将“mov ax,4c00”之前的指令复制到内存0:200处。
assume cs:code
code segment
mov ax,cs//由于复制的是内存中的数据,而cs:ip指示了内存中的地址,所以将cs的值传递给ax。
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
mov cx,17h//前面的源程序在内存中总共占了23字节,这个是将源程序编译连接之后用debug里面的U命令查看即可
s:mov al,[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值