随笔分类 - 汇编程序
摘要:安装新的int 9中断例程(按'A'键后显示满屏幕的'A') int 9 是外中断,同样,程序编写还是和其他中断例程类似,安装(复制),调用; 不同点是在于,他要从端口读取数据60h, Source Code : assume cs:code stack segment db 128 dup(0)
阅读全文
摘要:CMOS RAM 芯片的特征: 包含一个时钟和一个有128个存储单元的RAM存储器。 该芯片靠电池供电。所以,关机后其内部的时钟仍可正常工作,RAM中的信息不丢失。 128个字节的RAM中,内部时钟占用 0~0dh 单元来保存时间信息,其余大部分单元用于保存系统配置信息,供系统启动时BIOS程序读取
阅读全文
摘要:int 中断相当于一个call指令的一个子程序,同样要将中断例程放到空闲中断位置;安装到指定int 中断,进行调用; (1)int 7ch中断,平方功能; 效果: Source Code: assume cs:code code segment start: mov ax,cs mov ds,ax
阅读全文
摘要:要求:除法溢出的时候,在屏幕中心处显示overflow! 分析: 0号中断,对应的中断入口地址中的程序可以不用修改,放到内存0:空余位置(空余位置一般是0000::0200~0000:02FF)于是,就将显示字符串的程序放到这里; 用一个do0安装程序,将这个中断程序复制到内存0000:0200那里
阅读全文
摘要:预备知识: 标志寄存器各位有具体的含义; ZF:0标志位,计算结果是否为0 PF:奇偶标志位,二进制1的个数是否为偶数 SF:符号标志位,是否为负数 CF:进位标志位(无符号) OF: 溢出标志(有符号) adc指令:带进位加法指令 sbb指令:带借位减法指令 cmp指令:比较 比较结果的条件转移指
阅读全文
摘要:内容:显示一个公司的信息,计算人均收入; Source Code: assume cs:codesg,ss:stack data segment db '1975','1976','1977','1978','1979','1980','1981','1982','1983' db '1984','
阅读全文
摘要:汇编试验一:查看CPU和内存,用机器码指令和汇编指令编程 汇编试验二:用机器指令和汇编指令编程 汇编试验三:编程、编译、连接、跟踪 汇编试验四:[bx] 和 loop 的使用 汇编试验五:编写、调试具有多个段的程序 汇编试验六:实践课程中的程序 汇编试验七:寻址方式在结构化数据访问中的应用 汇编实验
阅读全文
摘要:预备知识: (1) ret :修改IP IP = SS*16 + SP SP+=2 retf :修改CS,IP IP = SS*16 + SP ,SP+=2 , CS = SS*16 + SP , SP+=2 Source Code: assume cs:code stack segment db
阅读全文
摘要:预备知识: 向内存B8000H~BFFFFH 处写入数据,写入的数据立即显示在显示器上; 显示器可以显示25行,每行80个字符,每个字符256种属性;(两个字节,分别是ASII码,属性)(高位属性,低位ASCII) 显示缓冲区有8页,一般情况下显示第0页的内容;
阅读全文
摘要:预备知识: (1) offset: 获取标号的偏移地址 (2) jmp :依据位移进行跳转 (jmp short 标号 ,jmp near ptr 标号,jmp near ptr 标号)——转到标号处 (3) jmp :转到内存 (jmp word ptr + 地址,jmp dword ptr +
阅读全文
摘要:预备知识: (1)寻址方式 《汇编语言》P169 (2)div指令 被除数 dx + ax,除数 bx ,商 ax,dx 余数; (3)dd :双字数据 (4)dup :重复赋值指令 实验任务:结构化存储 Source Code: assume cs:codesg, ds:data, es:tabl
阅读全文
摘要:(1)大小写转换 Source Code: assume cs:codesg,ds:datasg datasg segment db 'BaSiC' db 'iNfOrMaTiOn' datasg ends codesg segment start: mov ax,datasg mov ds,ax
阅读全文
摘要:ds 数据段放入数据正确; 两次push 操作后,ss栈段正确; 由于pop 操作顺序,ds数据段并没有发生改变; Source Code: assume cs:code, ds:data, ss:stack data segment dw 0123H,0456H,0789H,0abcH,0defH
阅读全文
摘要:预备知识: 段前缀的使用; ffff:0~ffff:b 和 0020:0~0020:b 的数据; 一次循环的复制效果: 但是,这种方式DS的数据得修改; Source Code: 于是,可以用两个段寄存器存放两个段地址; (原始数据) Source Code: 试验任务: 将0020:0~0020:
阅读全文
摘要:masm 的下载,直接在机房拷贝,本打算直接在win10上编译连接好,但是发现还是不兼容;还是要利用DOSBox虚拟编译,连接; 开始加载程序,单步调试; 栈的效果: 因为这里的ss:sp位置恰好都是0,看不出ax,bx发生了交换; Source Code:
阅读全文
摘要:预备知识: d命令+段寄存器 注意栈段,定义的时候定下了栈顶,push操作后sp减小; 试验任务: 注意: CS:IP指向代码段; (ax,bx正确入栈) 出栈后ax,bx值交换了 两条push操作后,栈段数据段改变;
阅读全文
摘要:预备知识: r命令查看,改变CPU寄存器的内容 2、D命令查看内存 3、E命令改写内存 两种方式: 1: 2: 内存中写入机器码 用T命令执行机器码(先将CS:IP指向要执行的内存处) 用a命令写汇编指令 试验任务: 计算2^8 结果:
阅读全文