汇编期末救命

编译原理(东南大学)一:【编译原理期末冲刺救命笔记】速存!看完再上考场稳了! 本文详细介绍了编译原理的核心概念和流程,包括程序设计语言的分类、编译程序的各个阶段(如词法分析、语法分析、语义分析、中间代码生成、优化和目标代码生成)以及编译程序生成和构造的基础知识。文章还探讨了编译中的表格管理、出错处理和遍的概念,以及编译基础知识如高级语言、语法规则、字母表和符号串的运算。此外,文中还涉及文法与语言的关系,包括文法的概念、非终结符、终结符、产生式、推导和规约等。整体内容旨在为学习编译原理的学生提供全面的复习资料和考试准备指南。 阅读详情


标志寄存器

1514131211109876543210
OFDFIFTFSFZFAFPFCF
OVDNEINGZRACPECY1
NVUPDIPLNZNAPONC0

计算数字、字符串长度

;$ 运算符(当前地址计数器)返回当前程序语句的偏移量。在下例中,从当前地址计数器($)中减去 list 的偏移量,计算得到 ListSize:
list BYTE 10,20,30,40
ListSize = ($ - list)

;注意是WORD还是byte
list WORD 1000h,2000h,3000h,4000h
ListSize = ($ - list) / 2

简化段定义

;简化段定义
	.model small	;定义程序的存储模型
	.stack	;定义堆栈段
	.data	;定义数据段
string	db ’Hello, Everybody !’,0dh,0ah,’$’
	;在数据段定义要显示的字符串
	.code	;定义代码段
	.startup	;程序起始点,建立DS、SS
	mov dx,offset string	;指定字符串
	mov ah,9
	int 21h	;利用功能调用显示信息
	.exit 0	;程序结束点,返回DOS
	end	;汇编结束
	
	
;完整段定义
stack	segment stack	;定义堆栈段
	dw 512 dup(?)
	;堆栈段有512字(1024字节)空间
stack	ends	;堆栈段结束
data	segment	;定义数据段
string	db ’Hello, Everybody !’,0dh,0ah,’$’
data	ends
code	segment ’code’	;定义代码段
	assume cs:code,ds:data,ss:stack
start:	
	mov ax,data	;建立DS段地址
	mov ds,ax
	mov dx,offset string
	mov ah,9
	int 21h
	mov ax,4c00h
	int 21h	;利用功能调用返回DOS
code	ends	;代码段结束
	end start
	;汇编结束,同时指明程序起始点

DOS系统功能调用

步骤

  1. 在AH寄存器中设置系统功能调用号
  2. 在指定寄存器中设置入口参数
  3. 执行指令INT 21H(或ROM-BIOS的中断向量号)实现中断服务程序的功能调用
  4. 根据出口参数分析功能调用执行情况

输入输出类功能调用

向显示器输出字符

字符的输出
;在当前显示器光标位置显示一个问号
mov ah,02h	;设置功能号:ah←02h
mov dl,'?'	;提供入口参数:dl←'?'
int 21h	;DOS功能调用:显示
字符串输出的功能调用
string db 'Hello,Everybody !',0dh,0ah,'$'   ;在数据段定义要显示的字符串
	mov ah,09h	;设置功能号:ah←09h
	mov dx,offset string	;提供入口参数:dx←字符串的偏移地址
	int 21h        ;DOS功能调用:显示

从键盘输入数据

字符的输入
  • 功能号:AH=01H

  • 出口参数:AL=字符的ASCII码

  • 功能:获得按键的ASCII代码值

  • 调用此功能时,若无键按下,则会一直等待,直到按键后才读取该键值

getkey:	mov ah,01h	;功能号:ah←01h
	int 21h	;功能调用
	cmp al,’Y’	;处理出口参数al
	je yeskey	;是“Y”
	cmp al,’N’
	je nokey	;是“N”
	jne getkey
	...
yeskey:	...
nokey:	...

字符串的输入
  • 功能号:AH=0AH
  • 入口参数:DS:DX=缓冲区首地址
  • 执行该功能调用时,用户按键,最后用回车确认
  • 本调用可执行全部标准键盘编辑命令;用户按回车键结束输入,如按Ctrl+Break或Ctrl+C则中止
buffer	db 81	;定义缓冲区
;第1个字节填入可能输入的最大字符数
	db 0	;存放实际输入的字符数
	db 81 dup(0)	;存放输入的字符串

	mov dx,seg buffer
	;伪指令seg取得buffer的段地址
	mov ds,dx	;设置数据段DS
	mov dx,offset buffer
	mov ah,0ah
	int 21h

mov指令的易错点

image-20201228004636802

易错语法点

  1. 立即数不能作为目的操作数,如mov 110H,AX
  2. 立即数不能直接传给段寄存器,如mov DS,110H // 翻译成机器码很长
  3. 两个操作数不能同时为段寄存器,如mov ES,DS // 可通过Ax寄存器间接传递
  4. 两个操作数不能同时为存储单元,如mov [0x1245],[0x1312] // 翻译成机器码很长
  5. 代码段寄存器CS不能为目的操作数,但可为源操作数 // CS为存放代码段的段地址,是代码段寄存器。它与IP共用,以指示下一条要执行的指令,不能随意更改!
  6. 指令指针IP不能作为mov指令的操作数

解决方案

需求错误指令正确指令备注
把字变量VARB的值传送给字变量VARAMOV VARA, VARBMOV AX, VARB MOV VARA, AX

变量定义(会画图)

定义字节单元伪指令DB

image-20201228002105620

定义字单元伪指令DW

image-20201228002335527

子程序

subname	proc	;具有缺省属性的subname过程
	push ax	;保护寄存器:顺序压入堆栈
	push bx	;ax/bx/cx仅是示例
	push cx
	…		;过程体
	pop cx	;恢复寄存器:逆序弹出堆栈
	pop bx
	pop ax
	ret		;过程返回
subname	endp		;过程结束

用寄存器传递参数

image-20201228003400793

image-20201228003415896

用变量传递参数

image-20201228003535210

image-20201228003619638

image-20201228003651265

用堆栈传递参数

image-20201228003724067

段转移

image-20201228004333712

image-20201228004347656

NEG指令

image-20201228004534055

存储器的分段问题

image-20201228005047869

ewH-1609088542836)]

段转移

[外链图片转存中…(img-IvSVKsTr-1609088542838)]

[外链图片转存中…(img-rI6MgpPO-1609088542840)]

NEG指令

[外链图片转存中…(img-KznNMrGI-1609088542844)]

存储器的分段问题

[外链图片转存中…(img-lq02vZIe-1609088542846)]

image-20201228005104400

HNU计算机系统课程通关攻略:从CSAPP到期末考,我的自学笔记与实验避坑全记录 本文分享了HNU计算机系统课程的高效学习攻略,从《深入理解计算机系统》教材精读到实验避坑技巧,详细解析了如何通过最小知识闭环、三明治学习法和资源组合拳提升学习效率。特别针对bomb lab和缓存实验提供实用技巧,帮助学生在应试与真学之间找到平衡,最终实现高分通关。 阅读详情

相关推荐

学术写作AI协作工作流:从指令设计到论文闭环

学术写作本质上是构建‘问题-证据-解释’的严密论证闭环,而非信息堆砌或语言美化。其核心挑战在于信息过载、任务模糊与反馈滞后,而高质量AI协作的关键,在于将抽象写作拆解为可定义、可执行、可验证的最小单元。通过结构化指令(如占位符校准、阶段化链式调用、术语一致性约束),研究者能有效锚定学科惯例、强化逻辑映射、提升实证回应力。该方法已广泛应用于开题选题筛选、文献综述批判性组织、数据分析因果推断、结论与研究问题严格呼应等典型场景,尤其适配教育学、经济学、管理学等强调政策关联与本土实证的人文社科领域。

Envisage123 376

请解释一下 str db 0dh,0ah,‘$‘ 这个汇编语句什么意思?

定义一个str 为字类型,0ah和0dh组合起来是换行的意思,$经常时字符串的结束标记 这个经常在字串符中用来做回车换行,使字串符能另起一行显示

未名编程 8377

汇编语言10号DOS系统调用功能详述

DOS 系统调用是调用操作系统提供的功能。提供的功能调用包括:设备管理、文件管理、目录管理及其它功能。其中,10号系统调用的功能为,从键盘上往 DS : DX 所指的输入缓冲区输入字符串(以回车键结束)并送显示器显示。

weixin_45762157的博客 1461

【个人笔记】汇编各进制输入与输出

这段汇编代码的主要功能是将寄存器BX中的16位数逐位按照十六进制逆时针旋转一圈(4位),并将结果打印在屏幕上,输出结果的形式为16进制数字。整个过程通过循环、移位、比较、加减来实现。若首位是0的正整数,补齐位数以后,将二进制中的位数分别与对应的值相乘,然后相加得到的就为十进制。(从后往前数位数,从0开始数)十六进制转换成十进制的公式是:要从右到左用二进制的每个数去乘以16的相应次方,然后这些数字相加就是了。首先将二进制数补齐位数,首位如果是0就代表正整数,首位如果是1就代表负整数。

m0_60959320的博客 4451

哈工大CSAPP完整学习资源包:实验、习题、真题与程序人生全攻略

计算机系统是连接硬件与软件的桥梁,也是程序员理解程序运行本质的核心知识体系。从数据的位表示到虚拟内存,从汇编指令到并发编程,系统级知识决定了开发者能否真正驾驭复杂工程。CSAPP作为经典教材,其配套实验更是将理论与实践紧密结合的关键环节。通过Linux环境下的动手实验,学习者可以深入掌握缓存、链接、异常控制流等底层原理,从而在性能优化、系统调试等场景中游刃有余。本文结合哈工大2021春季课程资源,梳理了八次实验、书后习题、历年真题及“程序人生”大作业的完整使用路径,帮助读者以实验驱动理论学习,高效构建系统级

weixin_33901926的博客 508

软件工程画图题全攻略:UML图与数据流图核心画法详解

软件工程中的图形化建模是需求分析、系统设计和项目管理中不可或缺的核心技能。从数据流图到用例图,从类图到状态图,每一种图都承载着将抽象业务逻辑转化为可视化结构的重要使命。理解这些图的符号规范与绘制原则,不仅有助于理清系统边界、对象关系和状态流转,更是工程实践中沟通需求、设计架构和编写测试用例的基础。面对考试或实际项目中的绘图挑战,系统掌握UML统一建模语言与经典数据流图的分层画法,能够显著提升分析与表达能力。本文结合软件工程常见考点,深入拆解多类核心图表的绘制要点与常见误区,并给出高效利用题库进行刻意练习的实

weixin_28487433的博客 241

字符串输入功能调用(0AH号功能调用)

字符串输入功能调用(0AH号功能调用)

qq_30773735的博客 889

MCS-51单片机复习核心考点与实战避坑指南

单片机是嵌入式系统的基础,而MCS-51作为经典内核,其寄存器操作、中断系统、定时器与串口等底层原理,至今仍是理解现代ARM芯片的基石。掌握这些原理不仅能应对考试,更能为实际项目开发扫清障碍。例如在单片机小车测速场景中,利用外部中断捕获脉冲并配合定时器计时,即可精确计算转速,这正是对定时器与中断系统的综合运用。同样,在实现信号捕获时,理解定时器的计数与自动重装机制,才能正确配置初值并避免波特率误差。从数码管动态扫描到存储器扩展,每一个工程问题都能回溯到基本概念。这份复习资料正是通过典型题型,将零散知识点串成

weixin_29168153的博客 235

汇编 out in_8086汇编期末总结

首先,本总结参考了王爽的《汇编语言》小生在这里感谢他们的知识贡献!目录寄存器简介指令用法寻址总结中断总结BIOS/DOS功能总结一 寄存器简介8086中寄存器大小均为16位通用寄存器:AX BX CX DX SI DI BP SP段寄存器:CS DS SS ES程序计数器:IP标志位寄存器:PSWUniform register常用用法介绍:1.ax通常用来存返回值,或者32位乘积的低16位,或者...

weixin_39761573的博客 1157

银河麒麟V10 SP3离线安装Nginx1.21.5全记录(附11个rpm包下载清单)

本文详细记录了在银河麒麟V10 SP3操作系统上离线安装Nginx 1.21.5的全过程,包括11个必备rpm包的下载清单。通过分步骤的实战指南,帮助用户在国产化环境中高效部署Nginx服务,涵盖安装、配置、调优及故障排查等关键环节,特别适合金融、政务等对安全性要求高的场景。

weixin_30872337的博客 609

Ubuntu docker镜像中下载安装 DPABI(DPARSF)

在Ubuntu服务器的docker镜像中用MATLAB运行DPABI(以及使用DPARSF的功能)。

Pandako's Blog 1723

汇编作业——计算前多少个数的累加和超过100

看着是简单的循环问题 易知答案是两位数,最后结果输出有点麻烦,需要一位一位的输出 DATAS SEGMENT ;此处输入数据段代码 DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 MOV AL,0;

qq_45405490的博客 644

【ESP32-IDF笔记】20-配置以太网网络(W5500)

基于ESP32IDF和官方的ethernet驱动,配置W5500以太网驱动芯片,实现ESP32的有线网络

别看了,就这些信息 3475

C语言分支语句的工程化思维:从if-else到决策树与状态机

分支语句是程序控制流的核心机制,本质是基于条件判断实现路径跳转,支撑输入处理、状态管理与错误恢复等关键能力。其底层原理涉及CPU的条件评估与指令指针跳转,直接关联编译优化(如跳转表、二分查找)和硬件行为(如分支预测、volatile内存访问)。在零基础入门场景中,常见误区是孤立记忆语法而忽视与真实工程问题的绑定,例如‘简易温度计的c语言代码’需应对非等距区间判断,‘c语言浮点型数值是否相等判断’则暴露IEEE 754精度陷阱。本文聚焦分支逻辑的具象化建模、性能重构(O(1)查表/二分替代线性扫描)及嵌入式安

weixin_34056162的博客 503

全网最全-DA14531-全球最小-BLE从入门到精通开发教程

本教程主要适用于低功耗产品,DA14531它体积小,非常适用于对体积敏感的设备,如无线可穿戴、传感器、助听器等设备。本文经过作者发大量时间来记录开发项目的调试方法,里面有许多笔者开发心得体会,旨在让读者工程师快速上手,减少摸索时间,提高软件质量。读者对象本文档主要适用以下工程师:嵌入式系统工程师单片机软件工程师IOT固件工程师BLE固件工程师。

hejinwu1314的博客 5138

基于学术研究风云卫星数据下载教程

目录 一、相关网址 1.登录注册网址:国家卫星气象中心 2.风云数据服务客户端下载网址 3.风云卫星遥感数据服务网址 二、下载数据步骤 1.首先在注册登录网址,注册一个账户 2.待账户审核后,登录账户即可搜索并下载数据 三、相关工具下载 1.登录风云卫星遥感数据服务网址 2.NCSA HDFView软件 3.风云卫星数据(L1)处理软件包(FENGYUN Toolkit v1.1) 4.静止卫星云图分区图显示软件(SECView) 5.风云二号静止气象卫星数据及产品处理..

珞瑜的博客 1万+

微机原理与接口技术|汇编语言|入门实验1

实验内容: 编写程序,比较两个字符串STRING1和STRING2所含的字符是否相同,若字符串相同则显示“Match!”,否则显示“No match!”。 程序流程图: 实现代码: DATA SEGMENT ;数据段定义 STRING1 DB 'HAPPY ASM' LEN1 EQU $-STRING1 ;$符号表示当前地址,该语句定义了字符串的长度 STRING2 DB 'HAPPY AS' LEN2 EQU $-STRING2 MSG1 DB 'Match!',0DH,0AH,'$' ;取得

看到就让我去打代码的博客 1791

基于YOLOv11的农作物病虫害检测系统设计与实现

我们使用公开的IP102病虫害数据集作为基础,该数据集包含102种病虫害类别,覆盖水稻、小麦、玉米等多种主要农作物。图像数量:75,222张类别数:102图像分辨率:从640×480到4000×3000不等标注格式:PASCAL VOC格式此外,我们还收集了部分田间实际拍摄的图像以增强模型泛化能力。

YOLO 596

微机原理换行代码_微机原理程序

mov ah,02 ;将接收到的字符显示在屏幕上int 21hjmp waitiexit: mov ah,4ch ;退出int 21hout1 proc near ;向外发送一字节的子程序out dx,alpush cxmov cx,40hgg: loop gg ;延时pop cxretout1 endpcode endsend start;8259-1.asm;8259中断查询方式应用实验;**...

weixin_42300525的博客 577

智元机器人开源具身仿真框架 Genie Sim 入门教程

GenieSim是AgiBot推出的具身智能仿真框架,提供完整闭环开发管道,包括轨迹生成、模型训练和基准测试。框架支持Docker容器化部署,要求Ubuntu 22.04和NVIDIA硬件环境。主要功能涵盖: 支持12种基准测试任务 提供ADER评估框架 集成UniVLA/RDT等基线模型 支持PICO/键盘遥操作 具备轨迹记录回放功能 提供完整API控制接口 开发者可通过Hugging Face获取场景资产,使用标准化ROS主题与仿真环境交互。框架特别优化了碰撞检测和抓取物理模拟,适用于从简单抓取到复杂操

2506_90492529的博客 2544

分类预测 | MATLAB实现ELM极限学习机多特征分类预测(二分类)

分类预测 | MATLAB实现ELM极限学习机多特征分类预测(二分类)

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 781

汇编语言基础知识

模板 data segment   [数据段] data ends code segment   assume cs:code, ds:data, es:data start:   [代码段] exit: mov ah,4cH   int 21H code ends end start 数据段 NumOut db 0dh, 0ah,“The number of Num is : $”   NumOut:变量名   db:定义   0dh, 0ah:换行   “The number of Num is :

TYA_Saras的博客 3079

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

汇编实验4-1

题目: StringA和StringB是两个串(可以程序固定,也可以由用户输入)。打印一个菜单供用户选择: - 选项1:在StringA中查找StringB的所在的位置,打印其位置下标(从0开始)。如果包含多个 ,需要逐一打印。 - 选项2:在StringA中指定位置插入StringB,打印插入后的串。指定位置可以固定,也可以由用 户输入(需要进行边界判定)。 - 选项3:在StringA中删除所有StringB的内容,然后进行输出。

Go_ahead_forever的博客 552

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

汇编字符串输出:输出Hello,Everybody !并换行输出secret字符串

输出Hello,Everybody !并换行输出secret字符串要在数据段定义,可以定义多个字符串,但不能是 data segment string db 'Hello,Everybody !',0dh,0ah,'secret','$' ;切忌串结束符$ data ends code segment start: mov dx,seg string mov ds,dx mov dx,offset string mov ah,09h int 21h mov a

weixin_44769639的博客 2014

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: 小猹学图论
下一篇: 离散
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值