李忠汇编语言-初学-第四天


学习目标

书籍 第六章


学习内容

类型:汇编语言
进度:初学
天数:第四天
日期:2020年09月18日
书籍:李忠汇编语言
相关:李忠汇编语言网易云课堂视频
内容:书籍 第六章 视频86
时间:2020年09月18日 15:00-2020年9月19日 1:00


学习时间

[60分钟] 15:05-16:05 Anki卡片学习、复习
[02分钟] 16:05-16:07 Anki卡片所学内容补充、添加、修改
[03分钟] 16:07-16:10 Xmind思维导图补充、添加、修改

【65分钟】 回顾/复习

[05分钟] 16:10-16:15 CSDN博客添加学习记录
[05分钟] 16:15-16:20 有道云笔记添加学习笔记
[10分钟] 16:20-16:30 浏览新闻博客,扩充视野
[20分钟] 16:30-16:50 偷闲杂事处理
[50分钟] 16:50-17:40 做好学习准备(准备好视频、书籍等)
[20分钟] 17:40-18:00 预习所学知识

【110分钟】 预习/预备

[60分钟] 18:00-19:00 第一次学习

学习内容:书籍 6.0-6.5

[40分钟] 19:00-19:40 休息
[40分钟] 19:40-20:20 第二次学习

学习内容:书籍 6.6

[40分钟] 20:20-21:00 休息
[60分钟] 21:00-22:00第三次学习

学习内容:书籍 6.6-6.9

[10分钟] 22:00-22:10 休息
[40分钟] 22:10-22:50 第四次学习

学习内容:书籍 6.10-6.12

[50分钟] 22:50-23:40 第五次学习

学习内容:书籍 检测点6.1-本章习题 视频86

[50分钟] 00:00-00:50 第六次学习

学习内容:笔记添加修改、卡片整理。

【300分钟】 学习


学习检测

第六章

检测点 6.1

选择填空:
NOVSB指令每次传送一个(),MOVSW指令每次传送一个()。原始数据在段内的偏移地址在寄存器()中,要传送的目的位置的偏移地址再寄存器()中。如果要连续传送多个字或字节,则需要()前缀,在寄存器()中设置传送的次数,并设置传送的方向。其中,()指令只是正向传送,()指令指示反向传送。反向传送时,每传送一次,SI和DI的内容将()。
A.字节 B.字 C.di  D.si  E.cx  F.rep  G.减小 H.std  I.cld  J.增大
答案:A B D C F E I H G

检测点6.2

选择题:下面哪些指令是错误的,为什么?
A.add ax,[bx]  B.mov ax,[si]   C.mov ax,[cx]
D.mov ds,[di]  E.mov dx,[ax]  F.inc byte [di]  G.div word [bx]
答案 :
C.如果要用寄存器来提供偏移地址,只能使用BX、SI、DI、BP,不能使用其它寄存器。
E.如果要用寄存器来提供偏移地址,只能使用BX、SI、DI、BP,不能使用其它寄存器。

检测点6.3

假设以下声明的是有符号数,那么其中的负数是()
data0 db 0xf0,0x05,0x66,0xff,0x81
data1 dw 0xfff,0xffff,0x8b,0x8a08
答案 :
0xfo =1111 0000=负数
0x05=0000 0101
0x66=0110 0110
0xff  =1111 1111=负数
0x81=1000 0001=负数

第一个字符小于8为正,大于等于8(即8到F)为负!

0xfff=111111111111
0xffff=1111111111111111=负数
0x8b=10001011
0x8a08=1000101000001000=负数

检测点6.4

1.ZF标志位和该标志位有关的条件转移指令用得非常频繁,但很多人容易在ZF标志位上犯糊涂,以为计算结果为零时,ZF为”0”,为了证明你不犯糊涂,请填空:
在ZF=(1)时,表明计算结果为零;jz指令的意思是当ZF=(1),即计算结果为(0)时转移;
je指令的意思是当ZF=(1),即计算结果为(0)时转移;jnz指令的意思是当ZF=(0),即计算结果不为(0)时转移;jne指令的意思是当ZF=(0),即结算结果不为(0)时转移。
2.
cmp ax,bx
ja lbb | jg lbb
cmp ax,bx 
je lbz 
cmp ax,bx
jb lbl | jl lbl

本 章 习 题

1.在某程序中声明和初始化了以下的有符号数。请问,正数和负数各有多少?
data1 db 0x05,0xff,0x80,0xf0,0x97,0x30
data2 dw 0x90,0xfff0,0xa0,0x1235,0x2f,0xc0,0xc5bc
正 6 负6

3.请问下面的循环将执行多少次:
mov cx,0
delay: loop delay
1.loop是先将cx减一,再判断是否循环,第一次循环后,cx=FFFF(65535)
2.从FFFF循环到CX为0,共65535次,最后一次,cx从1变成0,不再循环。

2.如果可能的话,尝试编写一个主引导扇区程序来做上面的工作。


         ;统计data1和data2里的正负数数量。AX=正数数量,DX=负数数量
         jmp near start
         
   data1 db 0x05,0xff,0x80,0xf0,0x97,0x30
   data2 dw 0x90,0xfff0,0xa0,0x1235,0x2f,0xc0,0xc5bc
  
  start:
         mov ax,0x7c0                  ;设置数据段基地址 
         mov ds,ax
         
         ;正负数的计数器清零
		 xor ax,ax
		 xor dx,dx
		 
		 ;统计data1处的正数和负数。
		 mov cx,data2-data1            ;循环次数(数据总数或者总字节数)
		 mov bx,data1                  ;要判断的数字的首地址
cnt1:
         cmp byte ds:[bx],0x80         ;按无符号数进行比较。高于等于0x80意味是负数。转neg1执行
         ;cmp byte [bx],0
		 jae neg1                      ;正数数量加一
         ;jl negl
		 inc ax
         jmp pos1
neg1:
         inc dx                        ;负数数量加一
pos1:    
         inc bx                        ;指向下一个要判断的数
         loop cnt1
		 
         ;统计data2处的正数和负数。
         mov cx,(start-data2)/2         ;循环次数(数据总数或者总字节数)
		 mov bx,data2                   ;要判断的数字的首地址
		 
cnt2:
         cmp word [bx],0x8000
		 ;cno word [bx],0
         jae neg2		                ;按无符号数进行比较,高于等于0x80意味是负数。转neg2执行 
		 ;jl neg2
		 inc ax                         ;正数数量加一
		 jmp pos2
neg2:
         inc dx		                    ;负数数量加一 
pos2:
         add bx,2                       ;指向下一个要判断的数
         loop cnt2
         
         jmp $

		 
		 

  times 510-($-$$) db 0
                   db 0x55,0xaa

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值