Chacix / Assembly

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

╔═══╗───────────╔╗─╔╗
║╔═╗║───────────║║─║║
║║─║╠══╦══╦══╦╗╔╣╚═╣║╔╗─╔╗
║╚═╝║══╣══╣║═╣╚╝║╔╗║║║║─║║
║╔═╗╠══╠══║║═╣║║║╚╝║╚╣╚═╝║
╚╝─╚╩══╩══╩══╩╩╩╩══╩═╩═╗╔╝
─────────────────────╔═╝║
─────────────────────╚══╝

In this folder, I recorded notes and codes for learning assembly language in the summer vacation of 2020. :P

注:部分代码及练习基于王爽《汇编语言》第三版,具体题目及要求请见书中
-----------------------------------------------------------------------------------------------------------------------

文件夹编号说明:
其中,为了避免文件夹命名及编号混乱:【预留空位】指的是为以后复习或者相关新项目所预留出来的编号。
=============================
1 - 2	基础

=============================
3 - 17	基于loop指令的代码及练习
18 - 20	【预留空位】loop指令预留空位

=============================
21 - 27	and和or指令
28 - 30	【预留空位】and和or指令

=============================
31 - 32	byte ptr 字节型数据 和 word ptr 字型数据
33 - 35	【预留空位】

=============================
36 - 40	div除法操作
41 - 45	div指令【预留空位】

=============================
46 - 47	寻址方式在结构化数据访问中的应用
48 - 50	【预留空位】

=============================
51 	offset操作符
52 - 55	【预留空位】

=============================
56 - 65	JMP指令

=============================
66	jcxz条件转移指令
67 - 69	【预留空位】

=============================
70	LOOP循环指令
71 - 74	【预留空位】

=============================
74 - 77	向屏幕彩色输出【实验9】
78 - 80	【预留空位】

=============================
82 - 83	ret、retf指令
84 - 85	【预留空位】

=============================
86 - 90	几种call的简介

=============================
91 - 98	call指令与ret的联合应用
99 - 100	【预留空位】

=============================
101 - 102	mul乘法指令

=============================
103 - 106	利用子程序的对字符串进行大小写转换
106 - 110【预留空位】

=============================
111 - 117	设计一简化版(整理内存段中的数据、进行乘除法、将数值转化为对应的ASCII码)
118 - 119	【预留空位】

=============================
120 - 126	初步显示字符串
127 - 129	【预留空位】

=============================
130 - 132	adc指令


=============================
136	sbb指令


=============================
140 - 146	cmp条件判断指令


=============================
150 - 151	rep movsb、cld/std实现数据正向/逆向传送


=============================
160	以0结尾的字符串中小写字母转大写【综合运用】


=============================
170	错误信息写入中断向量表【内中断】


=============================
180 - 188	中断例程的运用


=============================
199	使用加法和位移指令计算(ax)=(ax)x10


=============================
200 - 202	端口的初步造作


=============================
205	以“年-月-日 时;分;秒”的格式,显示当前时间


=============================
220 - 224	键盘中断例程


=============================
240 - 248	通过标号定位数据、直接定址表


=============================
260 - 261	接受键盘输入

=============================

编程小技巧:
将ds与si配合使用
将es与di配合使用	<--- 虽然es和si可以配合使用,但是介于后面涉及的课程及指令,不建议使用 ds:di,、es:si !!

在对程序分段时,如果遇到寄存器冲突,可以先将冲突的寄存器push到栈中,需要时再pop出来

如果合理的使用db, dw, dd ==> 看操作的寄存器,比如:操作的寄存器为16位,则应该用dw

如果参数过多,要处理的数据使用较多的寄存器,那么可以先将数据进行结构化处理再进行编写代码,这样可以更好的处理数据

将字符串显示在屏幕上(B800H)时,一定要注意将存放属性的高位字节写入数据,否则会造成无法显示
将字符串显示在屏幕上(B800H)时,先输出余数,在对ax中的商是否为零进行判断,否则会造成以零为结尾的数值无法显示

将int型数值转换为string字符串时,在进行除10取余时,每显示完一个字符,记得将储存高位字节的dx清零

在编写子程序时,可在程序开头处将程序中用到的寄存器进行push,在ret前再进行pop,这样就不用考虑是否会影响到程序外的寄存器(注意push和pop的顺序)

About


Languages

Language:Assembly 79.8%Language:C++ 20.2%