《汇编语言》第七章 -更灵活的定位内存地址的方法 检测点,实验6答案,总结

第七章:更灵活的定位内存地址的方法

1.两个指令
and指令:逻辑与,按位进行与运算。(同1为1,其余为0)
or指令:逻辑或,按位进行或运算。(同0为0,其余为1)
2.关于ASCII码:
因为计算机中所有的信息都是二进制信息,所以如果想要把我们可以理解的字符存入计算机,需要对二进制进行编码,让二进制信息表示我们的字符。计算机再把二进制信息解码为我们理解的字符,只要编码和解码采用同样的规则。就可以将我们可以理解的信息存入计算机,再从计算机中取出。其中ASCII码是比较通用的一种编码方式。
(第5位为0,是大写字母,一般用and(11011111b);为1,是小写字母。)
3.SI和DI:
功能·与bx类似,但不能拆分为两个8位的寄存器。
4.几种不同的寻址方式:
‘[bx]’:偏移量为(bx)
‘[bx+idata]’:多写为idata[bx];偏移量为(idata+bx),多应用于数组,用以定位元素。
‘[bx+si]’:多写为[si][bx],偏移量为(si+bx),可用于多维数组。
‘[bx+si+idata]’:多写为idata[si][bx],更加灵活。
5.关于实验的几个总结:
当用多重循环时,可用栈来保存cx中的值,使其不被覆盖。(推广:暂存数据,一般都是用栈。)

实验6. 实践课程中的程序

(将课程中的所讲解过的程序上机调试。)对于所讲解的每一个程序,我都完整的在机器上调试过,并且得到了正确的答案,确实纠正了不少的错误,比如说内外层循环分不清;把si放到循环之外,造成了程序崩溃等等;
2.编程。完成问题7.9中的程序

assume cs:code
data segment
db '1. display      '
db '2. brows        '
db '3. replace      '
db '4. modify       '
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends

code segment		;代码段
start:
mov ax,data
mov ds,ax		;将ds指向data段
mov ax,stack
mov ss,ax
mov sp,10h		;将ss:sp指向stack段,此时栈空

mov bx,0
mov cx,4		;设置外层循环次数,及第一行地址
s1:
push cx			;外层循环次数进栈保存
mov si,0		;设置第一列地址
mov cx,4		;设置内层循环次数

s2:
mov al,[bx][si+3]			;将第0行3列数据送入al
and al,11011111b			;将第0行3列字符置为大写
mov [bx][si+3],al				;重新放入第0行3列		
inc si						;设置内层循环控制变量(内层每次递增1,即列数加1)
loop s2

pop cx						;恢复外层循环次数	
add bx,10h					;设置外层循环控制变量(外层每次递增16,即行数加1)
loop s1

mov ax 4c00h
int 21h

code ends
end start

总结:经过本章的学习,体会了内存灵活的寻址方式,与C语言中的数组寻址相联系。



?北这个家伙天天喊着我下棋,其实我不想下,他太菜了?。本来昨晚想做高数的,结果看了s9的比赛,一整晚都浪费了,,,这个高数一天不练,两天生。难?。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值