【笨鸟先飞 汇编挖坑】第一天

机器语言 汇编语言

计算机可以直接读得懂的语言,因其只用01两种信号难以编写学习,才产生了汇编语言,汇编语言由汇编指令和伪代码两部分组成,汇编指令是直接对应机器语言,而伪代码则需要编译器进行编译。

CPU与储存器

储存器

以二进制形式储存数据(包括代码)
存储器被分成若干个存储单位并从0编号每个存储单位一个字节(byte)
单位换算 : 8bit=1byte
1MB=210byte
1GB=210MB
1Tb=210GB

CPU

运算器进行信息处理;
寄存器进行信息存储;
控制器控制各种器件进行工作组成
CPU内三者由内部总线连接

寄存器

8086有十四个寄存器:
通用寄存器:AX,BX,CX,DX(数据)SP,BP,SI,DI(指针&变址)
段寄存器:CS,DS,SS,ES
指令指针:IP
标志寄存器:PSW

通用寄存器常作为两个8位使用,H表示高位 L表示低位
AX=AH+AL
BX=BH+BL
CX=BH+BL
DX=DH+DL

两者联系

CPU与存储器进行以下三类信息的交换:
1、存储单元的地址(地址信息);
2、器件的选择、读或写命令(控制信息);
3、读或写的数据(数据信息) 。
而交换的桥梁便是总线,
总线分为地址总线、数据总线、控制总线。

总线的宽度:总线由多根线组合而成,每根线可以独立地流过高平或者低频脉冲

  • 地址总线:总线宽度决定了CPU的寻址能力
    例如:宽度为16,可以形成216个组合,这些组合对应了存储器中存储单位的编号
  • 数据总线:总线宽度决定CPU一次可以进行数据传送的量
  • 控制总线:总线长度决定CPU对其他器件的控制能力

物理地址

8086CPU寄存器最大宽度为16,而其有20位地址总线,为了使达1M的寻址能力得到利用,8086CPU采用在内部用两个16位地址合成20位地址,即物理地址

物理地址=段地址*16+偏移地址

一个物理地址可以对应多个段地址&偏移地址组合

  • 这里的段地址相当于一个起点,偏移地址则是一个偏移量
  • 段地址存放往往存放在段寄存器中:
    几个特殊寄存器组合:
    CS:IP指向当前要执行的指令,在debug中是T指令执行的代码
    执行完命令后IP会自加一定位数让CS:IP指向下一条命令
    SS:SP指向栈顶元素,同样push pop SP会自加

基础代码

  • 赋值:mov
  • 加法:add
  • CS:IP 数值修改:jmp
    CS:IP 无法用mov赋值
    格式:jmp xxxx:xxxx同时给 CS IP 赋值
    jmp 合法寄存器 给 IP 赋值
    jmp还是无条件跳转命令 )

debug命令

  • - R查看 改变寄存器的值 例如: -R AX
  • - D查看内存中的内容 -D xxxx:xxxx or -D xxxx:xxxx x
  • -E 改修内存内容 可批量改写 :-E xxxx:xxxx x 00 01 02 33 or 提问式改写
  • -U 翻译并显示内存中的汇编命令
  • -T 执行CS:IP下一个指令
  • -A 以汇编格式写入内存
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
以下是一个简单的Python代码,实现了一个笨鸟先飞的小游戏: ``` import pygame import time import random pygame.init() # 设置游戏屏幕大小 display_width = 800 display_height = 600 gameDisplay = pygame.display.set_mode((display_width,display_height)) pygame.display.set_caption('笨鸟先飞') # 定义颜色 black = (0,0,0) white = (255,255,255) red = (255,0,0) # 加载小鸟图像 birdImg = pygame.image.load('bird.png') # 定义小鸟的位置和移动速度 x = 150 y = 200 y_change = 0 # 定义管道的位置和移动速度 pipe_speed = 5 pipe_width = 70 pipe_gap = 150 pipe_height = random.randint(150, 450) pipe_x = display_width pipe_y = 0 - pipe_height # 定义分数 score = 0 # 加载字体 font = pygame.font.SysFont(None, 50) # 定义游戏结束的函数 def game_over(): # 显示游戏结束的文字 message_display('游戏结束') # 等待2秒钟 time.sleep(2) # 关闭游戏窗口 pygame.quit() quit() # 定义显示文字的函数 def message_display(text): # 渲染文字 text_surface = font.render(text, True, black) # 将文字居中显示在屏幕上 text_rect = text_surface.get_rect() text_rect.center = (display_width/2, display_height/2) gameDisplay.blit(text_surface, text_rect) # 刷新屏幕 pygame.display.update() # 游戏循环 while True: # 处理事件 for event in pygame.event.get(): if event.type == pygame.QUIT: # 关闭游戏窗口 pygame.quit() quit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: # 小鸟向上飞 y_change = -8 # 计算小鸟的位置 y += y_change if y > display_height: game_over() if y < 0: y = 0 # 计算管道的位置 pipe_x -= pipe_speed if pipe_x < -pipe_width: pipe_x = display_width pipe_height = random.randint(150, 450) pipe_y = 0 - pipe_height score += 1 # 检查是否碰到管道 if x + birdImg.get_width() > pipe_x and x < pipe_x + pipe_width: if y < pipe_height or y + birdImg.get_height() > pipe_height + pipe_gap: game_over() # 绘制屏幕 gameDisplay.fill(white) gameDisplay.blit(birdImg, (x,y)) pygame.draw.rect(gameDisplay, green, (pipe_x, pipe_y, pipe_width, pipe_height)) pygame.draw.rect(gameDisplay, green, (pipe_x, pipe_y + pipe_gap, pipe_width, display_height - pipe_height - pipe

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

得有个名

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值