汇编
缘之妙不可言
java
展开
-
汇编-子程序参数传递的三种方式-寄存器法,堆栈法,参数赋值法【详述后两者】
汇编-子程序参数传递的三种方式:寄存器法,堆栈法,参数赋值法子程序结构如下:名称 PROC FAR|NEAR;DO SOMETHINGRET [N];返回断点地址,N可忽略,加了必须对SP进行 平栈 操作名称 ENDP结合此结构,我们来看,1.寄存器法这个方法最简单易用,但是要注意对寄存器的选择,一般选ABCD[X]通用寄存器就可以了。步骤如下:1.通过MOV指令将参数存到寄存器2.再在子程序中调用寄存器即可【注意保护寄存器】样例就不给了。2.堆栈法过程原创 2020-05-23 13:55:23 · 6691 阅读 · 1 评论 -
汇编-输出寄存器的值-输出值
学习汇编有一阵了,已经能够写出一些简单的计算程序(求斐波那契。。。)今天总结一下令初学者感到头疼的寄存器值输出问题我们知道:可以看出寄存器值是一个十六位进制的数,我们可以将其每一位都转成字符进行判断,完成后使用9号系统功能输出结果。此时计算机输出时以ascll码为准,所以要将他显示出来,就需要将十六进制数转换为对应位的字符的ASCLL码存起来,再输出。此处16进制为0-9,A-F(a-f)的组合我们知道0-9的ASCLL码为48-58之后的59ascll是冒号“:”一直到64号再到65原创 2020-05-16 23:40:37 · 13175 阅读 · 2 评论 -
汇编-输入8位二进制串并转换为16进制数显示到屏幕(利用8421转换)
今天编写了一个输入二进制串并转换为16进制数显示到屏幕的汇编程序在编写过程中遇到一些问题,并解决后,想把它与大家分享。题目是这样的:分析题目:可得要求输入 11111111得到 00FFH那么思路就是:0.输入类似11111111的8位二进制1.对输入的字符串要转换为对应的数字0,1二进制存在内存中。2.对输入的字符串可通过8421方法计算10进制存到AX。3.输出AX那么代码:数据段:用8421计算2进制串的10进制数子过程:do8421: ;计算每4位的84原创 2020-05-13 15:50:12 · 5273 阅读 · 1 评论 -
汇编-简单的条件转移指令应用-附例子:判断坐标所在象限
在汇编分支程序设计中,条件转移指令扮演着很重要的角色首先让我们认识一下简单的条件转移指令:这些指令都是通过flag寄存器中的标志位进行判断的一般情况下使用CMP指令来影响标志位结合这些指令执行相当于高级语言的if,else如图:例题:做出分析:主要是判断是否为0,以及它的正负情况。所以:主要应用条件转移指令,判断不同象限,主要指令:JZ/JE,JNS/JS,JMP假设:为方便查看结果,可将K输出为对应的ascll字符,既是48到52,达到k=i的显示效果那么代码部分:数据段:原创 2020-05-13 15:28:38 · 800 阅读 · 0 评论 -
汇编-debug结果正确与执行结果错误
昨天写了一个输入二进制转16进制的程序结果老是:debug结果正确与执行结果错误例如11111111在 debug中是00FFH在执行时却一直是:0030H弄了好久,最后发现是地址给错在输入字符串时,没有将偏移地址赋给DX既是缺少MOV DX,OFFSET TEMP;TEMP输入介质一失足成千古恨!!!!!还有2种情况是:没有正确对通用寄存器清零错误使用了非通用寄存器做通用寄存器...原创 2020-05-13 14:23:55 · 914 阅读 · 0 评论 -
汇编 debug调试没有执行对应文件源码指令---》失灵---》正确使用debug第一步
汇编 debug调试时没有执行对应文件源码指令果然不认真听课就是这样把调试命令debug test.exe错误写成debug test.asm并一直使用多达两周时长我真是个人才Σ( ° △ °|||)︴正确使用debug第一步:debug test.exe是正确的,且需要编译链接源文件得到马虎不得!...原创 2020-05-04 21:25:29 · 295 阅读 · 0 评论 -
汇编---输出AX的地址值
输出步骤:定义一个字变量对AX求ASCLL字符存入操作内存地址的寄存器—SI打印mov ax,mov si,offset Temp+3;保存存储结果的字符串的最后一个字符偏移地址 xor cx,cx ;对cX清零 mov cl,4 ;设置循环次数为4次MainPart: mov DH,AL ;将Al...转载 2020-04-24 23:50:30 · 2055 阅读 · 0 评论 -
常用的汇编系统功能指令(包含字符功能类,中断终止类)
中断功能:INT N;N代表整数一般DOS下使用INT 21H中断代码终止功能:可以使用INT 20H终止程序但不建议一般使用4CH功能号:MOV AH,4CH或MOV AX,4C00H,都一样字符功能:几乎每个功能都与AH或AX,AL有关格式一般为MOV AH,功能号MOV 寄存器,目标值01H、07H和08H—从标准输入设备输入字符 从标准输入设备(如:键盘...原创 2020-04-21 21:00:17 · 1294 阅读 · 0 评论 -
汇编--两种过程定义的方式,调用方式。
了解一些基础:过程是伪指令的一种过程通过CALL调用过程一定放在代码段过程的定义两种方式:1.默认使用near近调用参数,若修改,必须使用方式2指定2.一定要用RET,强制返回方式1:NAME:;DOSOMETHINGRET方式2:NAME PROC [FAR/NEAR];二选一;DOSOMETHINGRETNAME ENDP注意:当代码段仅含一个过程时,需要...原创 2020-04-21 08:51:47 · 1140 阅读 · 0 评论 -
汇编cmp比较指令解释,其影响CF,ZF,OF,AF,PF
例:cmp oprd1,oprd2为第一个操作减去第二个操作数,但不影响第两个操作数的值,它影响flag的CF,ZF,OF,AF,PF.判断相等:若执行指令后:ZF=1,则说明两个数相等,因为zero为1说明结果为0.当无符号时:若CF=1,则说明了有进位或借位,cmp是进行的减操作,故可以看出为借位,所以,此时oprd1<oprd2;CF=0,则说明了无借位,但此时要注意ZF是...原创 2020-04-02 08:37:36 · 6459 阅读 · 0 评论 -
微机原理汇编之部分重要知识整合包括:判断解释程序运行(新手有利)并画存储结构,字节变量,寻址方式
基本是想到什么说什么,归纳自己遇到的问题但总的 方向依旧如标题。一、判断解释程序运行(建议先看完第二大点–画存储结构)给出前提代码:数据段DATA SEGMENTS DB 1,2,3,4W DW 1921H,4567HS2 DB ‘ABCD’S3 DW ‘12’,’34’DATA ENDS代码段code segmentstart:MOV S+1, 45...原创 2020-03-24 19:44:48 · 500 阅读 · 0 评论 -
8086汇编常用代码总结(个人向),包含换行函数(过程),执行输出,结束程序
输出换行函数:printH:MOV DX,0AH;换行MOV AH,02HINT 21H;执行输出RET使用方式:CALL printH输出变量MOV AX,DATA;代码段赋值MOV DS,AX;代码段赋值LEA DX,变量名;MOV AH,09H;09H输出功能INT 21H结束程序MOV AX,4C00H;结束功能INT 21H加油学习!...原创 2020-03-22 14:02:43 · 1731 阅读 · 0 评论 -
8086CPU标志位寄存器的分类及其作用说明(补:FLAG寄存器结构)
8086一共9种标志寄存器分别是CF进位标志,值为1进位,为0无进位PF奇偶标志,代表数据的奇偶,1为偶,0为奇OF溢出标志,1代表溢出,0代表未溢出AF辅助进位标志,1有进位,0无进位ZF判0标志,1代表值为0,0代表不为0SF符号标志,1代表负值,0代表非负值TF跟踪标志,单步执行,常用于汇编程序debugDF方向标志,1代表减少,0代表增加如图:...原创 2020-03-09 14:28:48 · 6009 阅读 · 0 评论 -
汇编之loop指令使用栈实现二重循环,同时了解汇编函数(过程)的概念用法
首先我们知道loop指令用于实现一层循环,CX寄存器存储其循环次数按照我的步骤,我一定不会满足单单一层循环,于是我在loop指令里面 套了一个loop指令,结果不言而喻,产生了一个无限死循环。这自然不是我要的结果。经过我的debug与猜测,发现是一层循环计数寄存器CX的值被二层的覆盖了自然不能简单的套loop了,而后在学习函数调用时阅读到这样两个与栈有关的指令pushpop作...原创 2020-03-01 16:08:08 · 1782 阅读 · 0 评论 -
汇编中的通用基础寄存器ax,bx,cx,dx等的含意及作用解释
对一些汇编语言中基础的寄存器的代表的字符及含意(基础的)一、段寄存器在程序中起到声明段的作用,一般与assume同时出现1.DS 数据段寄存器2.ES 附加数据段寄存器3.CS 代码段寄存器 ,既是存放程序代码的可以有多个4.SS 堆栈段寄存器二、通用数据处理器通常用于处理数据1.AX 累加寄存器。所有外部设备的输入输出指令只能使用AL或AX做为数据寄存器。2...原创 2020-02-29 21:22:48 · 19698 阅读 · 0 评论 -
汇编loop指令及用法解释
首先知道寄存器的类别,其中CX寄存器是计数寄存器,在循环,位移等操作中重要loop指令格式初始化寄存器CX的次数标识符:;完成的操作LOOP 标识符说明:loop指令会使每循环一次,cx就对自身值减1操作,直到等于0为止,在此之前,一直重复执行标识符到loop间的代码loop指令基本代码实现功能:输出6行井号 MOV CX,5;循环6次 st2:;输出# ...原创 2020-02-29 21:06:48 · 24662 阅读 · 5 评论 -
vscode较详细注释的汇编语言hello world 输出程序,第一个汇编程序
输出hello world,经典且不失优雅的操作。在写之前先了解一些知识,会编译连接运行.asm文件然后看一下汇编程序基本结构,有一点点matlab的感觉代码段,数据段,附加数据段等。注释符是分号具体结构:;汇编结构**data SEGMENT; 数据段,数据放到这段 ; 标识符 db/dw 数据; ;定义字符串---- stri db "abdcsadabdahsd...原创 2020-02-28 13:07:09 · 10922 阅读 · 8 评论 -
(有图片)汇编工具dosbox下自动mount及切换虚拟目录使用步骤。
自动mount方法在后面。自从知道bat后,一直都是喜欢用批处理完成一些简单重复的东西。在学习汇编时我们通常需要用到dosbox模拟32位操作系统下的命令行。运行一个.asm文件的步骤:1.先挂载文件夹到虚拟目录就是含有masm及其相关软件的目录下,既是汇编的自定义工作目录。命令:mount 虚拟盘符 目录路径如: mount c e:\masmwork2.切换到对应虚拟盘符...原创 2020-02-27 11:35:39 · 7862 阅读 · 0 评论