![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
汇编语言
文章平均质量分 57
慕梅^
模棱角,退优越,沉下心,听进话,忌清高,冷旁观。
展开
-
[汇编语言]宏汇编
使用宏汇编语句,可以减少程序书写错误,缩短源程序长度长度。宏:宏指令:宏定义语句MACRO和子程序定义语句PROC一样都是伪指令。宏定义需要一对伪指令MACRO和ENDM完成。格式:宏名 MACRO [哑元1,哑元2,…]语句串ENDM说明:语句串代表宏定义体。宏定义并不产生目标代码,只是用来说明“宏名字”与宏定义体之间的联系。其中哑元1,哑元2,… 是虚拟参数或称形式参数,用逗号分隔。虚参(形参)可不设置。宏定义之后,要在程序中使用宏时,只要写出宏名字即可。使用宏的过程称为宏调用。如宏原创 2022-06-07 16:51:13 · 6488 阅读 · 0 评论 -
[汇编语言]子程序结构--五种子程序的参数传送[重点]
(1)NEAR属性:调用程序和子程序在同一个代码段中,(段内调用)(2)FAR属性,调用程序和子程序不在同一个代码段中(段间调用)例1:十六进制到十进制的转换。要求从键盘输入的0-FFFFH的正整数转换为十进制数并在屏幕上显示出来(通过寄存器传送参数)详细解读例2:十进制到十六进制的转换程序,程序要求从键盘取得一个十进制数,然后该数以十六进制形式在屏幕上显示出来...............原创 2022-06-05 21:36:54 · 2363 阅读 · 0 评论 -
[汇编语言] 循环与分支程序设计 例题
这题需要注意,低位比较的条件转移时应该使用无符号数JA与JB(也就是Above与below),而高位是带符号数的JG与JL(greater与less)。这题具体考察了无符号数与带符号数的条件转移指令的使用。循环程序设计首先解释错误原因:由于这里是字相加,因而,每次应该加两个字节;另外一个需要注意的是:ADD AX,ARRAY[SI]这里使用寄存器相对寻址方式,而寄存器寻址方式使用的寄存器是固定的,只有基址寄存器(BX/BP)和变址寄存器(DI/SI)四个,不要瞎用正确解法:代码详细解释:BX原创 2022-06-05 02:39:29 · 891 阅读 · 0 评论 -
[汇编语言]各个指令对于标志位的影响
CF:若计算结果有向更高位的进位,CF=1,否则为0OF:带符号数加法,两个操作数的符号相同,而结果却与操作数相反(正+正=负/负+负=正)剩下的则根据结果:ZF:结果为0,PF:二进制下1的个数为偶数,PF=1,SF:负数为1除了对CF标志位不影响,其余都影响CF:若计算的过程中有向更高位的进位,则CF=1,否则为0OF:带符号数减法:两个操作数的符号相反,结果却与减数符号一致,则溢出,OF=1(正-负=负/负-正=正)值得注意的是:加减法都是双操作数,而乘除法都是单操作数,具有隐含的寄存器,并且原创 2022-06-03 19:40:07 · 4493 阅读 · 0 评论 -
[汇编语言]习题3.35的答案错误:计算机内部JL等转换指令的判断和直接手算的判断
(5)和(7)答案不对补码运算其实就是争对带符号数,直接减就行,转成加法也可以(这里都做了)关于JL的判断条件为:SF与OF异或为1,其实也不需要这么复杂,因为这是计算机内部的要做的。(JLE那么就是SF与OF异或的结果再与ZF或操作为1即可)而手算的话就按照补码减法,负数就为less,正数就为greater而无符号数,直接比较就可以,你要是执着于计算机内部的计算,那么便是CF与SF的或为1则为JB(below)手算的话就从高位往低位进行比较即可。(5)FFC5H(负)-FF8BH(负)=03A原创 2022-06-03 12:14:06 · 434 阅读 · 0 评论 -
[汇编原理 IBM-PC] 串循环指令/循环指令LOOP/子程序
REP是前缀,但它不是伪指令,REP有具体功能,它可以判断CX是否为0,还可以执行CX=CX-1CX的递减不影响标识位格式一般为:REP 指令执行的操作:1.先判断CX(计数寄存器)是否为0,如果为0,则退出循环2.CX减一3.执行MOVS等串指令4.重复1~3的步骤常见格式:1.MOVSB (字节操作) MOVSW(字操作)实际上执行的是REP MOVS 串传送指令的使用1.2 STOS 存入串操作STOS指令一般用来初始化(并且是初始化附加段的)常见格式LODSB (字节操作)原创 2022-06-01 19:50:02 · 2112 阅读 · 0 评论 -
[汇编语言]逻辑指令和移位指令
逻辑运算指令移位指令移位指令的一些应用原创 2022-05-29 19:59:45 · 192 阅读 · 0 评论 -
[汇编语言/计算机组成原理]乘法IMUL的CF/OF判断
很显然,F9肯定不是F5的符号扩展,溢出OF=CF=1看了点例题,估摸着这种题不会考。原创 2022-05-29 15:01:53 · 902 阅读 · 0 评论 -
[汇编语言]数据传输指令和算术指令
通用数据传输指令MOVPOP PUSHXCHGCBW(convert byte to word)算术指令ADDSUB原创 2022-05-28 21:53:36 · 741 阅读 · 0 评论 -
原码/补码/反码
取反的小细节需要注意的是:负数原码转化成补码,需要进行的取反与-[Y]补=[-Y]补中的取反并不相同书上的有符号数一般都是原码表示,即最高位是符号位但由于原码不太好计算减法,因此,计算机内部使用的都是补码。二进制没有符号位,只表示数值...原创 2022-05-28 19:30:46 · 65 阅读 · 0 评论 -
[汇编语言 IBM-PC]寻址方式配套习题
8086的寻址方式操作数的有效地址只包含位移量一种成分。与转移地址有关的寻址方式这种寻址方式用来确定转移指令以及CALL指令的转向地址值得注意的是:NEXT 是转向的符号地址,在机器指令中用位移量来表示。段内直接寻址的指令码中包含一个8/16位位偏移量Disp,因而JMP NEAR PTR 5119H,5119H为偏移量见例题3-5有相关题目值得注意的是,JMP BX,这个是寄存器寻址方式,因此BX中存放的就是操作数,因此(IP)=(BX)=12原创 2022-05-28 17:09:29 · 1448 阅读 · 0 评论 -
[汇编语言]子程序:十六进制到十进制的转换。要求从键盘输入的0-FFFFH的正整数转换为十进制数并在屏幕上显示出来(通过寄存器传送参数)
十六进制到十进制的转换。要求从键盘输入的0-FFFFH的正整数转换为十进制数并在屏幕上显示出来(通过寄存器传送参数)ASCLL码(大小写字母以及数字)数字的十六进制则从30H开始(0~9)30H~39HASCLL码转十六进制键盘读取的是数字键盘读取的是大写字母键盘读取的是小写字母代码细节主框架从键盘上读取的ascll码转化成二进制二进制转化成十进制全部代码hexidec segment assume cs:hexidecmain proc farsta.原创 2022-05-23 21:40:37 · 1447 阅读 · 0 评论 -
[汇编语言]子程序结构 十进制到十六进制转换程序
decihex segment assume cs:decihexmain proc farrepeat: call decibin call crlf call binihex call crlf jmp repeatmain endpdecibin proc near mov bx,0 ;从键盘上获得一个数字,将它转化成二进制 .原创 2022-05-23 19:06:47 · 1297 阅读 · 0 评论 -
[汇编语言] 第五章循环与分支程序设计 在数组中查找元素并删除
串处理指令CLD(CLear Directionflag)则是清方向标志位,也就是使DF的值为0,在执行串操作时,使地址按递增的方式变化,这样便于调整相关段的的当前指针。这条指令与STD(SeT Direction flag)的执行结果相反,即置DF的值为1指令类型 MOVS move string 串传送CMPS compare string 串比较SCAS scan string 串扫描LODS load from .原创 2022-05-23 09:29:56 · 380 阅读 · 0 评论 -
[汇编语言]第五章循环与分支程序设计 5.2 在ADDR单元中存放着数Y的地址,试编制一程序把Y中1的个数存入COUNT单元
方案:逐位测试,通过移位循环计数值位16测试数是否为0结束,缩短程序的执行时间data segmentnumber dw Y;Y在实际测试中应该为具体的数addr dw number;将Y的地址number放到addr指向的单元当中,addr仍然是地址。count dw ?code segmentmain proc farassume ds:data,cs:code;我们知道,这里只是写了其对应关系,但是并没有实际赋值start:;保存原有的值,以便返回return push原创 2022-05-22 19:27:40 · 533 阅读 · 0 评论 -
[汇编语言]第五章 循环与分支程序设计 试编制一个程序把BX寄存器的二进制数用十六进制数的形式在屏幕上显示出来
循环程序设计例5.1试编制一个程序把BX寄存器的二进制数用十六进制数的形式在屏幕上显示出来code segment main proc far assume cs:codestart: push ds sub ax,ax;单纯就是想要使得ax为0,有很多的方式比如xor ax,ax 或者直接mov ax,0都可以 push ax mov ch,4;这里ch是作为循环四次的计数器rotate: mov cl,4 rol bx,cl mov al,bl原创 2022-05-11 20:28:46 · 2148 阅读 · 1 评论