汇编
文章平均质量分 51
汇编语言
ʚVVcatɞ
时光难留,只有一去不返。
展开
-
汇编语言 ORG伪指令
ORG伪指令给它下面一条语句指定起始偏移地址。通常,段定义语句 segment 指出了段的起点,偏移地址为0,段内各个语句或数据的地址,将会由段起始地址开始依次后推。当要对某条指令或某些数据规定特殊的存放地址时,可用ORG伪指令来实现,ORG语句可放在程序的任何位置。assume cs:code, ds:datadata segment ORG 1500HTest1 DB 12H, 34H ;Test1变量的偏移地址为1500H ORG 3000HTest2 DW 3040H, 283原创 2021-06-26 19:29:30 · 8536 阅读 · 0 评论 -
汇编语言 判断学生成绩是否及格
设某个学生的英语成绩已存放在AL寄存器中,如果低于60分,那么打印F(FAIL);若高于或等于85分,则打印G(GOOD);当在60分和84分之间时,打印P(PASS)。assume cs:code, ds:datadata segment score db 90 ; 分数 give_a_mark db 0, '$' ; 评分data endscode segment start: mov ax, data mov ds, ax ; 初始化 ds,将data段的偏原创 2021-06-26 18:48:28 · 2072 阅读 · 0 评论 -
汇编语言 外部中断
外部中断,也称为硬件中断,它们从8086的不可屏蔽中断引脚NMI或可屏蔽中断引脚 INTR 引入。从INTR脚上来的请求信号,CPU可以立即响应,也可以暂时不响应。如果CPU内部标志寄存器中的IF置1,则允许响应这类中断;若IF标志为0,则不予响应。以下是从键盘输入产生中断响应,改变二进制的值的程序代码。assume cs:code, ds:data, ss:stackdata segment db 128 dup(0)data endsstack segment stack db 1原创 2021-06-25 21:29:25 · 1303 阅读 · 0 评论 -
汇编 输入输出指令
输入输出指令用来完成I/O端口与累加器之间的数据传送,指令中给出I/O端口的地址值。当执行输入指令时,把指定端口中的数据读入累加器中;当执行输出指令时,则把累加器中的数据写入指定的端口中。IN输入指令指令格式:IN AL, 端口地址或IN AX, 端口地址端口地址存放在DX寄存器中IN AL, DX 或IN AX, DX 指令功能:从8为端口读入一个字节到AL寄存器,或从16为端口读一个字到AX寄存器。16位端口由两个地址连续的8为端口组成,从16位端口输入时,先将给定端口中原创 2021-06-25 19:37:33 · 3660 阅读 · 2 评论 -
汇编 SHL指令和SHR指令
SHL指令SHL指令使目的操作数逻辑左移一位,最低位用0填充。最高位移入进位标志位,而进位标志位中原来的数值被丢弃。若将1100 1111左移1位,该数就变为 1001 1110例如:BL左移一位。最高位复制到进位标志位,最低位填充0:mov bl, 8FH ; BL = 10001111bshi bl, 1 ; CF = 1, BL = 00011110b当一个数多次进行左移时,进位标志位保存的是最后移出最高有效位(MSB)的数值。mov al,原创 2021-06-25 17:56:28 · 7721 阅读 · 0 评论 -
汇编语言 实现一个数字的平方
; 参数 ax = 3456; 返回值 dx = 高 16位 ax = 低16位assume cs:code, ds:data, ss:stackdata segment db 128 dup(0)data endsstack segment stack db 128 dup(0)stack endscode segment start: mov ax, stack mov ss, ax mov sp, 128 call cpy_new原创 2021-06-24 19:36:21 · 1872 阅读 · 0 评论 -
汇编语言 pushf 和 popf指令
以下是举例 pushf 和 popf指令的使用assume cs:code, ds:data, ss:stackdata segment db 128 dup(0)data endsstack segment stack db 128 dup(0)stack endscode segment start: mov ax, 0 ; ax = 0000 0000 0000 0000 push ax popf ; PSW = 0000 0000原创 2021-06-23 16:59:34 · 6478 阅读 · 1 评论 -
汇编语言 CMP指令
CMP(比较)指令执行从目的操作数中减去源操作数的隐含减法操作,并且不修改任何操作数。指令格式:CMP 目的操作数, 源操作数标志位 当实际的减法发生时,CMP指令按照计算结果修改溢出、符号、零、进位、辅助进位和奇偶标志位。如果比较的是两个无符号数,则零标志位和进位标志位表示的两个操作数之间的关系如下表所示:CMP结果ZFCF目的操作数 < 源操作数01目的操作数 > 源操作数00目的操作数 = 源操作数10如果比较的是两个有符号数,则符号标志位原创 2021-06-22 17:09:41 · 83165 阅读 · 2 评论 -
汇编语言 8086+8255A仿真中断控制
结合https://blog.csdn.net/qq_44989881/article/details/117292615二进制与十六进制的转换可对下面仿真的开关进行操作文件链接:https://share.weiyun.com/79WpsSxH代码DATA SEGMENTTABLE DB 40H, 79H, 24H, 30H, 19H, 12H, 02H, 78H ; 数码管 数字显示 DB 00H, 18H, 08H, 03H, 46H, 21H, 06H, 0EHDATA ENDS原创 2021-06-22 09:50:41 · 654 阅读 · 0 评论 -
汇编语言 ADC指令和SBB指令
ADC(带进位加法)指令将源操作数和进位标志位的值都与目的操作数相加。该指令格式与ADD指令一样,且操作数大小必须相同。例如下述指令实现两个16位整数相加(FFFFH + 1000H),产生的16位和数存入DX:AXassume cs:code, ds:data, ss:stackdata segment db 256 dup(0)data endsstack segment stack db 128 dup(0)stack endscode segment start: m原创 2021-06-21 18:19:43 · 3670 阅读 · 0 评论 -
汇编语言 标志位
加法和进位标志位两个无符号整数相加时,进位标志位是目的操作数最高有效位进位的副本。如果和数超过了目的操作数的存储大小,就可以认为CF=1。mov al, 0FFHadd al , 1 ; AL = 00 , CF = 1在上面的加法运算中,AL最高有效位的进位复制到进位标志位。如果AX的值为00FFH,则对其进位加1操作后,和数不会超过16位,那么进位标志位清0.mov ax, 00FFHadd ax, 1 ; AX = 01原创 2021-06-21 11:00:37 · 4414 阅读 · 1 评论 -
汇编语言 内部中断
内部中断不需要硬件支持,不受IF标志控制,不执行中断总线周期,除单步中断可通过TF标志允许或禁止外,其余都是不可屏蔽的中断。内部中断分为以下几种:(1)除法错误中断。CPU在执行触发指令时,若发现除数为0或者所得的商超过了寄存器能容纳的范围,则自动产生一个类型为0的除法错误中断。(2)单步中断。如果CPU的单步标志TF置1,那么每执行完一条指令后,会自动产生类型为1的单步中断,CPU响应中断后,暂停执行下条指令,转到单步中断服务程序去执行,其结果是将CPU的内部寄存器和有关存储期的内容显示出来,便于跟踪原创 2021-06-20 16:44:29 · 1804 阅读 · 1 评论 -
汇编语言 条件转移指令JCXZ
JCXZ若CX为0跳转指令格式:JCXZ 标号指令功能:若CX寄存器为0,则转义到指令中标号所指定的地址处,否则将往下顺序执行,它不对CX寄存器进行自动减1的操作。assume cs:code, ds:datadata segment db 1, 2, 3, 4, 5, 6, 7, 8, 9, 0data endscode segment start: mov bx, data mov ds, bx mov bx, 0 mov b原创 2021-06-18 17:57:32 · 1208 阅读 · 0 评论 -
汇编指令 DUP指令
复制操作符DUP可以定义重复变量,其格式为:变量名 伪指令指示符 nDUP(操作数) ; 其中 n 为重复变量的个数 例如:用重复操作符DUP定义变量。assume cs:code, ds:data, ss:stackdata segment db 100 dup(0) db 100 dup('12') dw 100 dup('1') db 256 dup(0)data endsstack segment stack db 128原创 2021-06-17 19:56:41 · 8341 阅读 · 0 评论 -
汇编语言 乘法和除法指令
除法指令DVI无符号数除法指令指令格式:DIV 源指令功能:对两个无符号二进制数进行除法操作。源操作数可以是字或字节。如果源操作数为字节,16位被除数必须放在AX中,8位除数为源操作数,它可以是寄存器或存储单元。相除之后,8位商在AL中,余数在AH中。即AL ← AX/源(字节)的商AH ← AX/源(字节)的余数要是被除数只有8位,必须把它放在AL中,并将AH清0,然后相除。如果源操作数为字,32位被除数在DX、AX中,其中,DX为高位字,16位除数作源操作数,它可原创 2021-06-17 16:36:14 · 7047 阅读 · 3 评论 -
汇编语言 字符串的复制
方法一:assume cs:code, ds:datadata segment db 'welcome to mams!' db '----------------'data endscode segmentstart: mov ax, data mov ds, ax mov es, ax mov si, 0 mov di, 16 mov cx, 16 copyData: mov dl, ds:[原创 2021-06-16 15:52:05 · 2055 阅读 · 0 评论 -
汇编语言 字母的大小写转换
大小写转换问题A 41H 0100 0001B or 0010 0000B 转换为小写B 42H 0100 0010BC 43H 0100 0011BD 44H 0100 0100Ba 61H 0110 0001B and 1101 1111B 转换为大写b 62H 0110 0010Bc 63H 0110 0011Bd 64H 0110 0100B原创 2021-06-16 11:19:06 · 2885 阅读 · 0 评论 -
汇编语言 在存储单元中显示字符串
第一种方式使用字符串存储assume cs:codedata segment db 'my name is vvcat!' ; 源串data endsstack segment stack dw 0, 0, 0, 0, 0, 0, 0, 0 dw 0, 0, 0, 0, 0, 0, 0, 0 dw 0, 0, 0, 0, 0, 0, 0, 0 dw 0, 0, 0, 0, 0, 0, 0, 0stack endscode segmentstart: m原创 2021-06-16 10:44:15 · 935 阅读 · 0 评论 -
汇编语言 AND逻辑与指令
AND逻辑与指令指令格式:AND 目的, 源指令功能:对两个操作数进行按位逻辑与操作,结果送回目的操作数,即目的←目的^源它主要用于操作数的某些保留(和“1”相与),而使某些位清除(和"0"相与)。例如,执行以下指令mov al, ffand al, 0f结果:ax = 0fmov al, ffand al, f0结果:ax = f0mov al, ffand al, ff结果:ax = ffmov al, ffand al, 00结果:ax = 00OR逻辑原创 2021-06-15 21:30:19 · 9114 阅读 · 0 评论 -
汇编语言 循环控制指令
循环控制指令是一组增强型的条件转义指令,用来控制一个程序段的重复执行,重复次数由CX寄存器中的内容决定。这类指令的字节数均为2,第1字节是操作码,第2字节是8位偏移量,转移的目标都是短标号。LOOP 循环指令(Loop)指令格式:LOOP 短标号指令功能:这条指令用于控制重复执行一系列指令。指令执行前必须事先将重复次数放在CX寄存器中,每执行一次LOOP指令,CX自动减1。如果减1后CX≠0,则转移到指令中所给定的标号处继续循环;若自动减1后CX=0,则结束循环,转去执行LOOP指令之后的那条指令。原创 2021-06-13 21:53:46 · 9954 阅读 · 0 评论 -
使用DOSBox编译汇编代码
安装 DOSBox:https://blog.csdn.net/qq_44989881/article/details/117266756配置环境变量添加后,在DOSBox控制台中输入 masm,显示如图所示,说明环境变量配置成功。新建一个ASM文件文件内容:assume cs:codecode segment mov ax,1000H add ax,ax mov bx,2000H add bx,bx mov ax,4C00H原创 2021-06-12 13:44:25 · 1902 阅读 · 1 评论 -
PUSH进栈指令和POP出栈指令
PUSH进栈指令指令格式:PUSH 源指令功能:将源操作数推入堆栈。源操作数可以是16位通用寄存器、段寄存器或存储器中的数据字,但不能是立即数。堆栈是以“先进后出”的方式工作的一个存储区,栈区的段地址由SS寄存器的内容确定。堆栈的最大容量可为64K,即一个段的最大容量。堆栈指针SP始终指向栈顶,其值可以从FFFEH(偶地址)开始,向低地址方向发展,最小为0。每次执行PUSH操作时,先修改SP的值,使SP←SP-2后,然后把源操作数压入堆栈汇中SP指示的位置上,低位字节放在较低地址单元,高位字节放在原创 2021-06-11 20:33:39 · 21121 阅读 · 3 评论 -
移动指令和运算指令
移动指令mov 寄存器,数据 mov ax,10H mov 寄存器,寄存器 mov ax,bxmov 寄存器,内存单元 mov ax,ds:[0] 取字型数据 mov al,ds:[0]取字节型数据mov 内存单元,寄存器 mov ds:[0],axmov 段寄存器,寄存器 mov bx,1000H → mov ds,bxmov 寄存器,段寄存器 mov bx,ds注: mov ds,数据H 是错误的赋值方式例如:原创 2021-06-11 17:53:23 · 404 阅读 · 0 评论 -
数据段寄存器DS的使用
通用寄存器:AX = AH(High) + AL(Low) = AX可以存放一个字型数据 = 存放2个字节型数据BX = BH + BLCX = CH + CLDX = DH + DL注:H = high 高 ,L= Low低,AH为高八位,AL为低八位,通用寄存器由高八位和低八位组成。通用寄存器 一般存放数据 ,存放的最小值为0000H,最大值为FFFFH,由2个字节构成的。(2Byte = 16Bit)范围0 ~ 65535(0 ~ 2的16次方 - 1)Byte = 8bit原创 2021-06-11 15:49:24 · 4368 阅读 · 0 评论 -
汇编 debug调试
debug 调试工具显示所有的寄存器rr 寄存器可以修改寄存器的内容dd 段地址:偏移地址d 段地址:偏移地址 Fuu 段地址:偏移地址u 段地址:偏移地址 Faa 段地址:偏移地址e 段地址:偏移地址e 段地址:偏移地址 "字符"t...原创 2021-06-01 18:58:56 · 234 阅读 · 0 评论 -
汇编 无条件转移和过程调用指令
jmp指令能够修改 IP 或 CS 或者同时修改的指令CS:段地址IP:偏移地址通过以下指令,修改段地址和偏移地址jmp 4000:0jmp 2600:500错误的修改CS和IP的方式:mov cs,2000mov ip,500mov ip,ax以上三条修改方式均是错误的修改方式。注意:用以下方式虽然编译成功,但是也不能对CS进行正确的修改。mov ax,500mov cs,ax但是用以下这种方式对IP进行修改:mov ax,500jmp ax指令原创 2021-06-01 16:11:18 · 2582 阅读 · 3 评论 -
汇编语言 数据寄存器AX、BX、CX、DX
通过汇编指令来修改寄存器中的内容,从而来控制CPU,寄存器是CPU中保存地址信息和数据信息的地方,寄存器之间是互相独立的。以下为通用寄存器:AX = AH + ALBX = BH + BLCX = CH + CLDX = DH + DL注:H = high 高 ,L= Low低,AH为高八位,AL为低八位,通用寄存器由高八位和低八位组成。通用寄存器 一般存放数据 ,存放的最小值为0000H,最大值为FFFFH,由2个字节构成的。(2Byte = 16Bit)范围0 ~ 65535(0 ~原创 2021-05-28 18:11:18 · 13854 阅读 · 0 评论 -
汇编基础题
(1)1个CPU的寻址能力为 8KB,那么它的地址总线的宽度为_____。解析:地址的数量 8 * 1KB = 8 * 1024 byte = 8192个地址的范围 0 ~ 8191 一根地址线 可以传送 0 或者 1, 所以宽度为 13根0 0000 0000 00001 1111 1111 1111 2的13次方 地址线的数量(2)1KB的存储器,有____个存储单元,存储单元的编号从____到____。解析:10240 ~ 1023(3)1KB的存储器 可以存原创 2021-05-27 21:44:18 · 185 阅读 · 0 评论 -
进制与进制转换
十六进制转换成二进制可以根据以下方法进行拆分8 4 2 1 = 1000 + 0100 + 0010 + 0001 = 1111例如:16进制的 E93C 可写成如下的形式 14 9 3 12 转换过程 8 4 2 1 8 4 2 1 8 4 2 1 8 4 2 1 8+4+2 =14原创 2021-05-26 15:28:13 · 757 阅读 · 0 评论 -
安装汇编使用的工具
DOSBox是一个软件,它是当前在 Windows、Linux,macOS,Android系统运行 DOS 游戏的较为完美的解决方案,该软件不仅能支持相当多的游戏实现正常运行,而且能将声音完美表现出来。DOSBox版本链接:https://www.dosbox.com/download.php?main=1Windows版本下载:https://sourceforge.net/projects/dosbox/下载后的安装程序:选择 Next选择 Install安装完成后,桌面会多出一个D原创 2021-05-25 23:35:51 · 306 阅读 · 1 评论 -
使用Microsoft Visual Studio安装AsmDude插件
在Microsoft Visual Studio中如果没有安装AsmDude插件,编写汇编语言的时候,代码不会高亮显示,此时需要安装AsmDude插件。Asm Dude安装方法:打开Visual Studio,在顶部菜单选择“扩展”->“管理扩展”。在“管理扩展”对话框的左侧选择“联机”,随后在右侧最上面的文本框中输入“AsmDude”,输入完毕,VS自动搜索对应的工具,稍等就会显示结果,出现对应的工具后,点击安装就可以了。安装支持汇编语言的 AsmDude插件可以对代码进行高亮显示。原创 2020-12-11 23:05:35 · 4020 阅读 · 4 评论