汇编
安達と島村
学习记录用,可能有错误的地方
展开
-
汇编语言(王爽)17章键盘缓冲区
cpu执行完int9之后,键盘输入放到了键盘缓冲区中。键盘缓冲区有16个字单元,可以存储15个按键的扫描码和对应的ascii码只有通码及相应ascii码会放入键盘缓冲区,断码不会一个按键占一个字,高位字节放扫描码,低位字节放ascii码控制键(shift、ctrl等)不会放入键盘缓冲区,但会改变状态字节的对应位int 16h;ah=0从键盘缓冲区读取一个键盘输入。返回:ah=扫描码,a...原创 2020-02-23 12:34:36 · 2182 阅读 · 0 评论 -
汇编语言(王爽)16章直接定址表和查询部分度数的sin值
a=ds:[si],那么a[sp]=ds:[si+sp]dw a,b=dw offset a,offset ba,b=dw offset a,seg a,offset b,seg bassume cs:code,ds:data ;ds=076adata segment db 9,9,9,9 ;09 09 09 09 a dw 1234h,2345h ;34 12 ...原创 2020-02-22 21:36:22 · 278 阅读 · 0 评论 -
汇编语言(王爽)15章实验15:DOS下松开A键显示全屏的A
DOS下松开A键显示全屏的A,其他键正常处理和输入f1改变全屏字体颜色的代码逻辑完全一样assume cs:code,ds:datadata segment db 16 dup(0)data endscode segment start: mov ax,0 mov es,ax mov di,200h mov ax,code mov ds,ax mov s...原创 2020-02-21 00:06:55 · 157 阅读 · 0 评论 -
汇编语言(王爽)15章编写int9中断例程:输入f1改变全屏字体颜色
关键步骤:保存中断向量表int9的地址到changeColor代码的data区把changeColor代码写进中断向量表保存中断向量表int9的地址设置为里changeColor代码的地址程序运行后,按F1依旧可以改变屏幕字体颜色assume cs:code,ds:datadata segment db 16 dup(0)data endscode segment star...原创 2020-02-20 23:56:18 · 345 阅读 · 0 评论 -
汇编语言(王爽)15章编写int9中断例程:输入esc改变字体颜色
在屏幕上依次显示a到z,过程中读取键盘的输入,如果输入esc就改变字体颜色。用栈和ds临时存储int9的原地址都可以,用栈操作的代码使用※1标记。流程:在屏幕上依次显示a到z时切换速度太快,调用sleep来延长时间找到int9在中断向量表的地址,保存后替换成自己int9fun的地址,调用自己的方法(重要)自己的方法用来实现输入esc就改变字体颜色的功能,之后还要调用原来的int9方法...原创 2020-02-20 13:59:56 · 1103 阅读 · 4 评论 -
汇编语言(王爽)14章BCD码和实验14显示当前日时
以[年/月/日 时:分:秒]的格式显示当前日时时间从cmos ram的读取,987420分别对应年月日时分秒,保存在cmos ram是BCD码的格式。如2的BCD是0010,6的BCD是1010,所以26的BCD是00101010。而26的BCD码右移四位可以得到0010,即2;and 00001111B可以得到1010,即6。数字+30H即可得到对应的字符串,如’0’=30H,‘1’=...原创 2020-02-16 22:04:39 · 812 阅读 · 0 评论 -
汇编跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等
跳转指令分三类:一、无条件跳转: JMP;二、根据 CX、ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转)、JECXZ(ECX 为 0 则跳转);三、根据 EFLAGS 寄存器的标志位跳转, 这个太多了.根据标志位跳转的指令:JE ;等于则跳转JNE ;不等于则跳转JZ ;为 0 则跳转JNZ ;不为 0 则跳转JS ;为负则跳转JNS ;不为负则跳...转载 2020-02-16 21:40:36 · 7877 阅读 · 0 评论 -
汇编语言(王爽)14章端口读写和移位指令shlshr
端口读写 in outassume cs:codecode segment start: mov al,2 out 70h,al ;//out 70h,2 ;//must be acuumulator register in al,71h mov al,0 out 71h,al mov al,0eeh in al,71h mov ax,4c00...原创 2020-02-16 20:12:37 · 343 阅读 · 0 评论 -
汇编语言(王爽)13章实验13编写在屏幕2/4/6/8行显示字符串
把偏移量用offset写进内存,读取后再操作该处的数据。assume cs:codecode segment s1:db 'Welcome to masm!','$' s2:db 'Good night Inory','$' s3:db "let's go go go",'$' s4:db 'mata kondo','$' s5:dw offset s1,offset s2,offs...原创 2020-02-16 15:24:43 · 301 阅读 · 0 评论 -
汇编语言(王爽)13章用7ch中断例程完成loop指令的功能
assume cs:codecode segment start: mov ax,code mov ds,ax mov si,offset fun mov ax,0 mov es,ax mov di,200h mov word ptr es:[0+7ch*4],200h mov word ptr es:[2+7ch*4],0 mov ...原创 2020-02-12 22:42:38 · 380 阅读 · 0 评论 -
(超级重要)汇编语言(王爽)13章编写供应用程序调用的中断例程和恢复寄存器的数据
示例一编写安装中断7cH(16进制的7C,很久才看明白)的中断例程,求word型数据的平方。参数:(ax)=要计算的数据返回值:dx和ax存放结果的高16位和低16位assume cs:codecode segment start: mov ax,code mov ds,ax mov si,offset s1 mov ax,0 mov es,ax ...原创 2020-02-11 22:06:07 · 327 阅读 · 0 评论 -
汇编语言(王爽)12章0号中断处理
除法溢出会导致0号中断,要求0号中断时在屏幕上显示"DIV Overflow!",并返回dos。assume cs:code,ss:stack;,ds:data ;data segment注释掉的话不注释ds:data会报错;data segment; db 'DIV Overflow!',0;data endsstack segment db 16 dup(0)stack ...原创 2020-02-11 13:04:39 · 288 阅读 · 0 评论 -
汇编语言(王爽)12章内中断
内中断的4种情况:中断原因中断类型码除法错误0单步执行1执行 into 指令4执行 int 指令,格式为int nn中断向量表: 是中断向量的列表.中断向量: 是中断程序的入口地址.对于 8086PC 机, 中断向量表存放在 0000:0000 ~ 0000:03FF 所在的内存中,共1000个单元.每个表项占用两个字节的大小. 高地址字...原创 2020-02-10 22:04:40 · 149 阅读 · 0 评论 -
汇编语言(王爽)11章实验11
编写一个子程序,将包含任意字符,以0结尾的字符串的小写字母转变成大写字母,描述如下:功能:将以0结尾的字符串中的小写字母转变成大写字母参数:ds:si指向字符串首地址assume cs:codedata segment db "Beginner's All-purpose Symbolic Instruction Code.",0data endscode segment ...原创 2020-02-10 20:09:43 · 536 阅读 · 3 评论 -
汇编语言(王爽)11章cmp
cmp是比较指令,cmp的功能相当于减法指令。它不保存结果,只是影响相应的标志位。其他的指令通过识别这些被影响的标志位来得知比较结果。执行完成后,如果ZF=1说明两个数相等CF=1说明有进位或借位,所以前数小于后数;CF=0说明没有借位,此时如果ZF=0则相等否则大于.SF=0,OF=0说明此时的值为正数,没有溢出,大于;SF=1,OF=0说明此时的值为负数,没有溢出,小于;SF=...原创 2020-02-10 16:53:41 · 308 阅读 · 0 评论 -
汇编语言(王爽)11章标记寄存器和对补码的理解
cf:无符号数计算是否进位或借位of:有符号数计算是否溢出,如8位计算的结果在-128到127以外sf:有符号数计算的结果是否为负数计算机中的数一般用补码表示,a的原码的首位不变,其他位取反再+1,得到a的补码;a的补码的补码就是a的原码。1000,0000是128的原码和补码,所以也是-128的补码。因为0的原码是0000,0000,所以0的补码是0111,1111+1=1000,0...原创 2020-02-10 15:50:32 · 1019 阅读 · 0 评论 -
汇编语言(王爽)11章adc和sbb
add al, dl; —> al = al+dladc ah, dh; ---->ah = ah+dh+cf上面两行指令一起执行的效果就是add ax,dxsub al, dl; ----> al = al - dlsbb ah, dh; ------> ah = ah - dh - cf上面两行指令一起执行的效果就是sub ax,dx名称 ...原创 2020-02-10 14:57:26 · 904 阅读 · 0 评论 -
汇编语言(王爽)10章实验10把二进制转出十进制并显示
参数:(ax)=word型数据,ds:si指向字符串首地址。(ax)=12666=317a,要求在屏幕指定位置显示指定颜色的12666字符串。显示的方法已经在实验10另一个题目写了。关键是317a–>12666。方法是不停的除以10,保存余数,然后每个余数数字转字符串(+30H)。因为从低位开始获得余数,所以用stack中转逆序保存到data里。注意※1处栈的定位代码mov bx,...原创 2020-02-09 17:35:22 · 1493 阅读 · 1 评论 -
汇编语言(王爽)10章实验10解决除法溢出问题
参数:(ax)=dword型数据的低16位(dx)=dword型数据的高16位(cx)=除数返回值:(ax)=结果的低16位(dx)=结果的高16位(cx)=余数思路是高16位除以除数的商就是返回值的dx,而(dx)=余数(ax)=参数的低16位这个数再除以除数,商就是返回值的ax,余数就是返回值的余数(因为这个数一定小于除数*65536,所以可以用除法可以保证不溢出)。...原创 2020-02-09 15:21:00 · 358 阅读 · 0 评论 -
汇编语言(王爽)10章实验10显示字符串
显示字符串,在指定位置(dh-1,dl-1)显示指定颜色(cl)的指定字符串(db)assume cs:code,ds:data,ss:stackdata segment db 'welcome to masm!',0data endsstack segment db 16 dup(0)stack endscode segment start: mov dh,2...原创 2020-02-09 13:49:09 · 336 阅读 · 0 评论 -
汇编语言(王爽)10章mul,批量数据传递和寄存器冲突问题
两个相乘数,要么都是8位,要么都是16位。 如果是8位,一个数字默认存放在al中,另外一个数字存放在其他8位寄存器中或者字节型内存单元中。mul 8位寄存器 ;结果存放在ax中mul byte ptr ds:[0] ;结果存放在ax中如果是16位,一个数字默认存放在ax中,另外一个数字存放在其他16位寄存器中或者字型内存单元中。mul 16...原创 2020-02-08 22:18:39 · 845 阅读 · 0 评论 -
汇编语言(王爽)10章call,ret和offset
ret 用栈中数据改IP内容,近转移retf用栈中数据同时改CS,IP,远转移用汇编解释ret -> pop ipretf -> pop ip; pop cspush先修改sp再放数据,pop先取数据再修改spcall指令当执行call指令时,进行两步操作:1)将当前的IP或CS和IP压入栈中2)转移call指令不能实现短转移,它的书写格式同jmp指令...原创 2020-02-08 20:13:19 · 512 阅读 · 0 评论 -
汇编语言(王爽)9章实验8和9
实验8:分析以下程序assume cs:codesgcodesg segment mov ax,4c00h int 21h start: mov ax,0 s: nop nop mov di,offset s mov si,of...原创 2020-02-08 16:14:19 · 362 阅读 · 1 评论 -
汇编语言(王爽)9章部分截图笔记offset等
原创 2020-02-08 14:38:43 · 135 阅读 · 0 评论 -
汇编语言(王爽)9章jcxz和loop
格式:jcxz 标号含义:if (cx == 0) jmp short 标号检测点9.2利用 jcxz 指令 , 实现在内存 2000H 段中查找第一个值为 0 的字节找到后 , 将其偏移地址保存在 dx 中。jcxz判断cx是否为0,cx是一个字,这里要找字节,所以需要把cx的另一个字节设为0。assume cs:codecode segment start: mov ax,...原创 2020-02-08 13:53:41 · 336 阅读 · 0 评论 -
汇编语言(王爽)9章jmp指令
jmp short 标号jmp near ptr 标号jmp far ptr 标号jmp 16位regjmp word ptr 内存单元地址jmp dword ptr 内存单元地址详情百度https://www.jianshu.com/p/c685c1c033ff若要使程序中的jmp指令执行后,CS:IP指向程序的第一条指令,在data段中应该定义哪些数据?若要指向第一条指令,则...原创 2020-02-08 13:36:08 · 1069 阅读 · 0 评论 -
汇编语言(王爽)8章实验七
下面的程序中,已经定义好了这些数据:assume cs:codesgdatasg segment db '1975','1976','1977','1978','1979','1980','1981','1982','1983' db '1984','1985','1986','1987','1988','1989','1990','1991','1992' db '1...原创 2020-02-07 21:16:41 · 333 阅读 · 0 评论 -
汇编语言(王爽)8章部分截图笔记div和dd/w/b和dup
assume cs:codecode segment start: mov ax,34465 #100001-65536![在这里插入图片描述](https://img-blog.csdnimg.cn/20200207181500215.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aH...原创 2020-02-07 18:15:30 · 302 阅读 · 0 评论 -
汇编语言(王爽)7章部分截图笔记
assume ds:data,cs:codedata segment db 'unIxabc' db 'foRKxY'data endscode segment start: mov ax,data mov ds,ax mov cx,7 mov bx,0 s: or ds:[bx],00100000b inc bx loop s mov cx,6 s1: mov...原创 2020-02-07 13:37:14 · 237 阅读 · 0 评论 -
汇编语言(王爽)6章部分截图笔记代码段空间分配和sp=0-2的场合
assume cs:code,ds:data,ss:stackdata segment dw 0,0,0,0,0,0,0,0,0 #9个数据时 ds=076a ss=076c cs=076d #8个数据时 ds=076a ss=076b cs=076c data endsstack segment...原创 2020-02-07 11:59:26 · 179 阅读 · 0 评论 -
汇编语言(王爽)4-5章部分截图笔记
汇编中must be index or base register是什么错误啊:1、使用寄存器间接寻址时,只可以使用 BX, BP, SI, DI 这四个寄存器中的一个,不可以使用其它寄存器。2、提示的意思是(方括号里)必须是变址(index,指SI, DI)或基址(base,指BX, BP)寄存器。...原创 2020-02-06 19:49:28 · 205 阅读 · 0 评论 -
汇编语言(王爽)1-3章部分截图笔记
下图说明XX保存一个字节里。一个X在0-15之间,4个bit可以表示。win64的cmd没有debug解决办法:https://blog.csdn.net/Hanniel/article/details/79506003原创 2020-02-05 19:03:45 · 121 阅读 · 0 评论