![](https://img-blog.csdnimg.cn/ef033b658d2b4011b291f5ab7b2c4807.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
汇编语言
记录《汇编语言.第四版》的学习笔记;汇编语言和逻辑设计基础是学习接口技术、组成原理和嵌入式的基础。
Mr_WangAndy
一个追求自由的Cpper!
展开
-
汇编语言_实验10:编写子程序
实验十原创 2021-12-29 21:25:51 · 1222 阅读 · 0 评论 -
汇编语言_探索C递归
用汇编探索C语言的递归原创 2021-12-10 07:01:02 · 282 阅读 · 0 评论 -
汇编语言_探索C语言参数
函数返回值原创 2021-12-07 22:52:27 · 414 阅读 · 0 评论 -
汇编语言_用汇编来理解C语言指针本质(2)
用汇编来理解C语言指针原创 2021-12-05 23:19:15 · 513 阅读 · 0 评论 -
汇编语言_用汇编来理解C语言指针本质(1)
用汇编来探索C语言指针的实质。原创 2021-12-02 22:00:35 · 1361 阅读 · 0 评论 -
汇编语言_探索C语言的返回值在哪
int f(void);int a,b,ab; // 存放在data段中main(){ int c; c = f(); } int f(void) // int 实际上是一块内存,指明了返回值。 { ab = a+b; return ab;}原创 2021-11-30 22:01:01 · 613 阅读 · 0 评论 -
汇编语言_探索C语言内存
c语言定义变量如下:int main(){ int a=1; // x int b = 2; // y}对应的汇编语言定义变量:data segmenta dw 1 ;xb dw 2 ;ydata ends可以看出:C语言中的x对应汇编语言的x的位置;C中的a和汇编中的a一样,都是内存的偏移地址;C语言中的int 对应的汇编中dw,表示数据的长度;C中的变量值和汇编数据段中的值一样。...原创 2021-11-28 22:44:04 · 395 阅读 · 0 评论 -
汇编语言_探索C语言的main函数的入口地址
探索C语言的main()函数的入口地址,首先要编译连接。在xp系统中,如下操作:**按f3,test.c文件的路径,将test.c中的源代码读入到tc.exe中;接着,按下f10,将option中的directory全部删掉,如下图所示;进入链接阶段:在compile中,选择link exe开始链接,如下图所示,这一步需要很多.obj文件,放入相同的路径下。最后成功生成test.exe文件编译一个程序需要前人写好的很多文件,如下图所示,最终才能生成.exe文件。现在,寻找Main原创 2021-11-20 22:38:39 · 2822 阅读 · 0 评论 -
汇编语言_字符串输入
assume cs:code,ss:stack,ds:datadata segmentSTRING db 128 dup(0)TOP dw 0 data ends stack segment stack db 128 dup(0)stack endscode segmentstart: mov ax,stack mov ss,ax mov sp,128 ;初始化栈 call init_reg call get_string mov ax,4原创 2021-11-10 07:05:47 · 5870 阅读 · 0 评论 -
汇编语言_int9中断(也是实验15)
记录一下Int9中断。我们从键盘输入一个按键时,会到达相关芯片的60端口;60端口会向CPU发出int9中断:告诉CPU有输入到了60端口。int9中断处理过程,有以下三步:读取60h端口中的扫描码;如果是字符键的扫描码,将送入内存中的BIOS键盘缓冲区;如果是控制键和切换键的扫描码,则将其转换为状态字,写入内存中存储状态字节的单元;对键盘系统进行相关控制,比如说,向相关芯片发出应答信息。上边这个过程,可以用下边的图表示。编写一个int9中断的例子,如下:...原创 2021-11-04 22:40:10 · 1158 阅读 · 0 评论 -
汇编语言_使用int16h中断读取键盘缓冲区
利用int 16h读取键盘缓冲区,int16的使用方法如下:mov ah,0int 16h结果:ah=扫描码,al=ASCII码调用int16h中断检测到键盘缓冲区后,发现缓冲区空,则循环等待,知道缓冲区中有数据;如果缓冲区满,则覆盖掉之前的数据。本实验就是利用了16中断检测缓冲区空不断读取的特性,完成了从缓冲区读取一个字符,并作出判断,根据是否符合条件来改变屏幕的颜色值。代码如下:assume cs:code,ss:stack,ds:datadata segment db 128 du原创 2021-11-04 06:50:18 · 2986 阅读 · 0 评论 -
汇编语言_实验16:编写包涵多个功能子程序的中断例程
实验16原创 2021-10-31 07:26:50 · 373 阅读 · 0 评论 -
汇编语言_输出sinx的值
assume cs:code,ss:stack,ds:datadata segmentARRAY db 87h,99h,0ah,0cdh,0DCHdata endsstack segment stack db 128 dup(0)stack endscode segmentstart: mov ax,stack mov ss,ax mov sp,128 ;初始化栈 call init_reg call show_sin mov ax,4c00.原创 2021-10-28 07:08:58 · 639 阅读 · 0 评论 -
汇编语言_直接定址表:模拟dos屏幕显示
显示和debug中一样的输出效果;输出16进制assume cs:code,ss:stack,ds:datadata segmentARRAY db 88h,99,0ah,0cdh,0DCHdata endsstack segment stack db 128 dup(0)stack endscode segmentstart: mov ax,stack mov ss,ax mov sp,128 call init_reg call show_byte原创 2021-10-26 07:03:48 · 134 阅读 · 0 评论 -
汇编语言_实验15:编写int 9 中断,完成键盘过程
int9中断例程原创 2021-10-24 21:16:56 · 781 阅读 · 0 评论 -
汇编语言_实验14简写:读取CMOS RAM中的年月日时分秒
读取CMOS RAM中的月份,里边存放了年月日时分秒信息。assume cs:code,ss:stack,ds:datadata segment db 128 dup(0)data endsstack segment stack db 128 dup(0)stack endscode segmentstart: mov ax,stack mov ss,ax mov sp,128 ; 初始化栈 call init_reg call show_month;==原创 2021-10-24 15:05:33 · 935 阅读 · 0 评论 -
汇编语言_CPU访问内存和访问接口
刚看《汇编语言》,CPU访问内存和访问接口的过程,这些个小知识点都是我想要学习的。有一个问题,不明白:CPU通过控制线发出端口读命令后,接着做选中端口所在的芯片,这句话不理解。如何选中的呢?具体什么过程,留在读后边的书,寻找答案吧...原创 2021-10-22 12:58:03 · 93 阅读 · 0 评论 -
汇编语言_实验13_编写、应用中断例程
实验13原创 2021-10-21 07:06:02 · 519 阅读 · 0 评论 -
汇编语言_实验12_编写0号中断处理程序
编写0号中断处理安装程序和处理程序原创 2021-10-18 06:28:04 · 631 阅读 · 0 评论 -
汇编语言_实验11:字母转换大小写_ja je jb的使用
将小写字符转换为大写字符,实现逻辑在代码中已经备注assume cs:code,ds:data,ss:stackdata segment db 'Beginners All-purpose Symbolic Instruction COde.',0data endsstack segment db 128 dup(0)stack endscode segment start: ;初始化程序 mov ax,stack mov ss,ax mov sp,128 call i原创 2021-10-15 23:21:52 · 657 阅读 · 0 评论 -
汇编语言_实验10
输出字符串assume cs:codedata segment db 'Welcome to masm!',0data endsstack segment stack db 128 dup (0)code segmentstart: mov ax,data mov ss,ax mov sp,128 ;初始化栈 mov bx,data mov ds,bx mov si,0 ;数据来源 mov bx,0b800h mov es,bx mov di,160*8 ;.原创 2021-10-14 23:01:44 · 314 阅读 · 0 评论 -
汇编语言_在屏幕输出实验7的数据
根据实验7,将table中的年份输出,如下:代码:assume cs:code,ds:data,ss:stackdata segment db '1975','1976','1977','1978','1979','1980','1981','1982','1983' db '1984','1985','1986','1987','1988','1989','1990','1991','1992' db '1993','1994','1995' ;以上是表示21年的21个字符串原创 2021-10-12 22:22:02 · 184 阅读 · 0 评论 -
汇编语言_实验12:编写0号终端的处理程序
编写0号终端的处理程序,使得在除法溢出发生时,在屏幕中间输出字符串"divide error!"assume cs:codecode segmentstart: mov ax,cs mov ds,ax mov si,offset do0 ;设置ds:si指向源地址 mov ax,0 mov es,ax mov di,200h ;设置es:di指向目的地址 mov cx,offset do0end-offset do0 ;设置cx为传输长度 cld rep原创 2021-10-10 20:04:35 · 360 阅读 · 0 评论 -
汇编语言_程序:在终端显示1234
assume cs:code,ds:data,ss:stackdata segment dw 1234data endsstack segment stack db 128 dup (0)stack endscode segment start: mov ax,stack mov ss,ax mov sp,128 ;设置栈 mov bx,data mov ds,bx mov si,0 ; 数据来源 mov bx,0b800h原创 2021-10-07 23:39:00 · 508 阅读 · 0 评论 -
汇编语言_jmp和call指令
书上写得很好,方便记忆,总结一下jmp指令的用法jmp short 标号相当于ip = ip + 8位位移jmp near ptr 标号ip = ip + 16位jmp far ptr 标号 ;段间转移cs: 段地址 ip = 偏移地址jmp word ptr 内存单元地址ip = (内存单元地址)jmp dword ptr 内存单元地址cs =(内存单元地址+2)ip = (内存单元地址)call指令的用法call word ptr 内存单元地址原创 2021-10-07 21:49:16 · 871 阅读 · 0 评论 -
汇编语言_实验8:分析一个奇怪的程序
分析下边这个程序是否可以正常返回,啊为什么是这样结果;assume cs:codesgcodesg segment mov ax,4c00h int 21hstart: mov ax,0s: nop nop ;被替换为 jmp short s1 mov di,offset s mov si,offset s2 mov ax,cs:[si] ;将cs:[si]=jmp short s1 指令放入ax中 mov cs:[di],ax ; 将 开始s位置的两条空指令 替换为原创 2021-10-07 20:41:49 · 220 阅读 · 0 评论 -
汇编语言_实验9:认识显存
认识显存loop指令综合使用原创 2021-09-28 23:23:57 · 224 阅读 · 0 评论 -
汇编语言_实验7:寻址方式在结构化数据访问中的应用
汇编语言灵活的访问地址方式。原创 2021-09-26 22:58:00 · 475 阅读 · 0 评论 -
汇编语言_实验6:[bx+si]的练习
本篇文章完成实验6内容,主要是运用灵活的地址定位方式:[bx+si]的使用编程练习5(7.10):将datasg段每行的单词转换成大写assume cs:codesg,ds:codesg,ss:stacksgdatasg segmentdb 'file 'db 'file 'db 'file 'db 'file 'datasg endsstacksg segment dw 0,0,0,0,0,0,原创 2021-09-25 15:51:57 · 416 阅读 · 0 评论 -
汇编语言_8086CPU的 5种寻址方式
总结一下8086CPU 的 5中寻址方式(定位内存地址)[idata] 用一个常量来表示一个地址,可用于直接定位一个内存单元;[bx] 用一个变量来表示内存地址,间接定位一个内存单元;[bx + idata] 一个变量和一个常量来表示,可在一个其实地址的基础上,通过变量来定位内存单元;[bx+si] 用两个变量来表示地址;[bx + si + idata] 用两个变量和一个常量表示这五种方式提供了更加灵活的寻址方式。...原创 2021-09-25 11:52:35 · 708 阅读 · 0 评论 -
汇编语言_实验5_执行程序回答问题
练习题分别如下:第一题data段中的数据如下:-d ds:0 即可查看CPU执行程序,程序返回前,CS: SS: DS:设程序加载后,code段的段地址为X,则data段的地址为:**X-2;**stack地址为:X-1;第二题1.2. 前两个问题答案如下:3. 程序加载后,code段地址为X,则data段地址为:X-2,stack段地址为X-1(16字节,32字节)将上述代码改成如下:可见:数据段有内存对其原则,十六进制,ds段寄存器+1,对应十六进制加1,恰好增原创 2021-09-22 23:12:56 · 681 阅读 · 0 评论 -
汇编语言_实验4_[bx]和loop的使用
代码执行如下:原创 2021-09-21 11:00:00 · 133 阅读 · 0 评论 -
汇编语言_段地址寄存器ES的使用
记录段地址寄存器的使用,用下面的例题来说明具体的使用方法。例题将内存ffff:0-ffff:f 内存单元中的数据复制到0:200-0:20f;分析:ds寄存器:记录数据从哪里来;es寄存器:记录数据到哪里去。assume cs:code code segment mov ax,0ffffh mov ds,ax ; 数据从ds中来 mov ax,20h mov es,ax ; 数据到es中去 mov bx,0 ; 0-16 mov cx,16原创 2021-09-20 22:23:43 · 5906 阅读 · 0 评论 -
汇编语言_实验3:编程、编译、链接、跟踪
题目如下:(1)将代码写在.asm中,然后打开boxdos即可生成t1.exe.(2)首先来分析一下,代码完成的功能。assum cs:codesgcodesg segment mov ax,2000 // ax = 2000 mov ss,ax // ss = 2000 mov sp,0 // sp = 0 add sp,10 // sp = 10, pop ax // sp = sp + 2 =12 pop原创 2021-09-16 23:27:22 · 296 阅读 · 0 评论 -
汇编语言_实验1:查看CPU和内存,用汇编指令和机器指令编程
第一题用机器码编程,-e-e 1000:0开始输入机器码,输入完成后-u 1000:0,查看内存中机器码对应的汇编码。用汇编指令编程,-a修改CS:IP寄存器中的值用-t开始指令指令,并观察寄存器中的内容执行前执行:mov ax,4e20h执行:add ax,1416第二题第三题:查看内存中的内容注意:ROM是不能修改的,是只读的。第四题:观看...原创 2021-09-14 23:32:25 · 559 阅读 · 0 评论 -
汇编语言_debug中R/D/E/U/T/A指令的使用
学习汇编语言,用debug编程是必不可少的;这篇文章记录,R命令、D命令、E命令、U命令、T命令和A命令的使用。安装完DosBox后,debug命令,开始使用。R命令:查看、改变寄存器d的内容查看寄存器的内容目前学习了AX,BX,CX,DX,CS,IP这6个寄存器,现在查看CPU中各个寄存器中的内容。在debug模式下,-r即可查看。上图的CS:IP指向的地址为CPU要读取和执行的指令。修改寄存器的内容修改寄存器格式如下:”r 寄存器名称想修改ax中的值,只需要“”r ax“”,将出原创 2021-09-14 22:55:20 · 12855 阅读 · 2 评论 -
汇编语言_8086CPU读取、执行指令的过程
这篇文章记录一下,8086CPU读取指令执行的过程。CPU当前的状态如下图所示:CS中的内容为2000H,IP为0000H;在内存中20000H-20009H的内存单元中。假如CPU要执行上面内存单元中的汇编指令,执行过程如下:第一步:初始状态初始状态:CS:2000H,ip:0000H,CPU将从内存2000H*16+0000H=20000H内存单元中读取指令,如下图所示。第二步 将CS IP送入地址加法器将CS 和IP寄存器中的内容送入地址加法器,地址加法器按照“”短地址*16 + 偏原创 2021-09-14 11:52:15 · 6185 阅读 · 3 评论 -
汇编语言_第四版_课后答案
参考:https://blog.csdn.net/yangzijiangac/article/details/114376550原创 2021-09-13 21:37:44 · 3109 阅读 · 0 评论 -
汇编语言_实验2:用机器指令和汇编指令编程
本篇文章记录,《汇编语言》王爽第四版,书中的实验1;共有实验1-实验17,还有研究实验1-5,后边会一一记录。实验1:查看CPU和内存使用debug,将下面的程序段写入内存,逐条执行,根据实际运行情况填空。mov ax,ffffmov ds,axmov ax,2200mov ss,axmov sp,100mov ax,ds:[0] ax= ?add ax,ds:[2] ax= ?mov bx,ds:[4] bx= ?add bx,ds:[6]原创 2021-09-09 10:32:11 · 1673 阅读 · 0 评论 -
汇编语言_CS、IP和JMP指令
看王爽的汇编语言,也听了相关的课程。CS:代码段寄存器,IP:指令指针寄存器JMP:跳转指令,可以修改CS和IP两个寄存器,将寄存器的值放入IP中。为什么用此指令“jmp ax”修改IP的值呢,直接mov ip,ax不就行了吗?这样是不被允许的。一个三个指令一起的题,如下:下面三条指令执行后,,CPU修改了几次IP值?在什么时候?最后IP的值是什么?mov ax,bxsub ax,axjmp ax 分析:CPU执行过程如下:1. CPU从CS:IP所指向的内存单元读取指(并计算出指令原创 2021-09-04 08:42:11 · 2506 阅读 · 0 评论