学习汇编前你应该知道的知识(四)------汇编程序

汇编学习教程:定义不同的段 引言 截至目前为止,我们所编写的汇编程序中有且只有一个段,那就是代码段。代码段当然是必不可少的,要不然我们的代码放在哪里呢! 在上篇博文中,我们学习了如何在代码段中申请空间,将申请过来的空间用来当作数据段和栈段来使用。这样的话,也就是说我们源程序中,数据段和栈段都在代码段内,它们共用同一个段地址。 这样就导致我们在编程时,要注意何处是数据,何处是栈,何处是代码。所以出现了两个问题: 1、把它们放在一个段中使程序显得混乱。程序结构不鲜明,不符合开发规范 2、我们上篇博文中的程序中处理的数据很少,且 阅读详情

 

第四讲 汇编程序

4.1 汇编程序框架

data SEGMENT '数据段,编程者可以把数据都放到这个段里
....数据部分
'数据格式是: 标识符 db/dw 数据。
data ENDS'数据段结束处。

edata SEGMENT '附加数据段,编程者可以把数据都放到这个段里
....附加数据部分
edata ENDS'附加数据段结束处。

code SEGMENT'代码段,实际的程序都是放这个段里。
       ASSUME CS:code,DS:data,ES:edata '告诉编译程序,data段是数据段DS,code段是代码段CS
start:MOV AX,data '前面的start表示一个标识位,后面用到该位,如果用不到,就可以不加
       MOV DS,AX '这一句与上一行共同组成把data赋值给DS。段寄存器.
       MOV AX,edata
       MOV ES,AX '与前一句共同组成edata->ES
       .......程序部分
       MOV AX,4C00h'程序退出,该句内存由下一行决定。退出时,要求ah必须是4c。
       INT 21h
code ENDS'代码段结束。
END start'整个程序结束,并且程序执行时由start那个位置开始执行。


上面就是一个程序的框架结构。在这个结构中,有三个段,DS,ES,CS。这三个段分别存数据,附加数据,代码段。

4.2 编写我们的Hello,world思路。
开始编写我们的第一个程序。
程序要求:显示一个“Hello,Mr.286.”怎么样?
思路:
1 要显示一个字符串,根据前面我让你们记的七八个指令够吗?答案是:不仅够,而且还用不完。
首先定义一下总可以吧。

hellostr db 'Hello,Mr.286.$'
最后的$不要忘了。

2 首先要考虑的问题就是找中断,找到合适的中断,该中断就能帮我们完成这个显示任务。我找到(在哪找到的,怎么找到的,别问我,到网上或书上都能找到):
-------------------------------------------
中断INT 21H功能09H

功能描述: 输出一个字符串到标准输出设备上。如果输出操作被重定向,那么,将无法判断磁盘已满
入口参数: AH=09H
DS:DX=待输出字符的地址
说明:待显示的字符串以’$’作为其结束标志
出口参数: 无
-------------------------------------------
由上面看到,我们所需要作的就是把DS指向数据段,DX指向字符串的地址,AH等于9H,调用21h中断。
mov ds,数据段地址
lea dx,hellostr 'hellostr已在前面1中定义了。
mov ah,9h
int 21h。
由于只要在调用int 21h之前把准备的东西准备齐就行了,所以int 21h前面三行的顺序并不重要。

3 退出程序,运行完总要退出呀。再查中断手册
--------------------------------------------
中断INT 21H功能4CH

功能描述: 终止程序的执行,并可返回一个代码
入口参数: AH=4CH
AL=返回的代码
出口参数: 无

--------------------------------------------
mov ah,4Ch
mov al,0
int 21h
或
mov ax,4c00h
int 21h
这里需要说明的是返回代码有什么用,返回给谁?返回给操作系统,因为是操作系统DOS调用的这个程序,这个返回值可以通过批处理中的errorlevel得到,这里不多说明,实际上操作系统很少处理这一值,因此al你随便写什么值影响都不大。

4.3 程序实现
data SEGMENT
msg DB 'Hello, Mr.286.$'
data ENDS

code SEGMENT
       ASSUME CS:code,DS:data
start:MOV AX,data
       MOV DS,AX
       lea dx,msg
       mov ah,9h
       int 21h
       MOV AX,4C00h
       INT 21h
code ENDS
END start

4.4 编译运行。
把上面程序保存成hello286.asm后,就可以编译运行了。进入DOS,进入汇编目录,如果还没下载,到前面找下载地址。

=================================================
E:/Download/Masm>masm hello286.asm
Microsoft (R) Macro Assembler Version 5.00
Copyright (C) Microsoft Corp 1981-1985, 1987.   All rights reserved.

Object filename [hello286.OBJ]:
Source listing   [NUL.LST]:
Cross-reference [NUL.CRF]:

   50408 + 415320 Bytes symbol space free

       0 Warning Errors
       0 Severe   Errors
说明:上面连续三个回车,表示我要的都是默认值。下面是零个警告,零个严重错误,(当然了,我的程序还敢错吗?)

E:/Download/Masm>link hello286

Microsoft (R) Overlay Linker   Version 3.60
Copyright (C) Microsoft Corp 1983-1987.   All rights reserved.

Run File [HELLO286.EXE]:
List File [NUL.MAP]:
Libraries [.LIB]:
LINK : warning L4021: no stack segment

说明:三个回车仍要默认,后面有个警告,没有栈段,这个没关系,没有的话系统会自动给一个。

E:/Download/Masm>hello286
Hello, Mr.286.
说明:运行成功。
E:/Download/Masm>
4.4 深度思考
4.4.1 是不是数据必须放数据段,代码必段放代码段呢?
答,代码必段放代码段,否则你怎么执行呀?但数据也可以放到代码段,只是程序要作修改。
code SEGMENT
       ASSUME CS:code,DS:data
       msg DB 'Hello, Mr.286.$'
start:MOV AX,data
       MOV DS,AX
       lea dx,msg
       mov ah,9h
       int 21h
       MOV AX,4C00h
       INT 21h
code ENDS
END start
编译后仍然可以。
4.4.2 我编的程序在内存中是什么样子的呢?
------------------------------------------------------------------------
E:/Download/Masm>debug hello286.exe
-u
1420:0000 B81F14         MOV     AX,141F
1420:0003 8ED8           MOV     DS,AX
1420:0005 8D160000       LEA     DX,[0000]
1420:0009 B409           MOV     AH,09
1420:000B CD21           INT     21
1420:000D B8004C         MOV     AX,4C00
1420:0010 CD21           INT     21
1420:0012 FF362421       PUSH     [2124]
1420:0016 E87763         CALL     6390
1420:0019 83C406         ADD     SP,+06
1420:001C FF362421       PUSH     [2124]
-d 141f:0000 L20
141F:0000   48 65 6C 6C 6F 2C 20 4D-72 2E 32 38 36 2E 24 00   Hello, Mr.286.$.
141F:0010   B8 1F 14 8E D8 8D 16 00-00 B4 09 CD 21 B8 00 4C   ............!..L
-q

E:/Download/Masm>
------------------------------------------------------------------------------
上面是什么呀?还记得前面说的吗?
1420:0000 B81F14         MOV     AX,141F
   |   |       |           |           |
段址:偏址 机器语言       mov指令 把段地址的地址(141f)赋值给AX寄存器。

1420:0012后面的是垃圾数据,不用管它,把上面程序与源程序作一个比较,看有什么不用,差别在于把标号语言转成实际地址了。
程序前两行一执行,数据段地址就变成了141f,而那个字符串偏移地址在0000,由(LEA     DX,[0000]看出),所以我用-d 141f:0000 L20(后面L20表示只显示20个字节),就能把段地址显示出来了。
所以刚才的程序在内存中就变成了:
141f:0000 Hello, Mr.286.$   ----->这是段地址里的内存
1420:0000 B81F14         MOV     AX,141F   ------>这是代码段里的内存。data变成了实际地址
1420:0003 8ED8           MOV     DS,AX
1420:0005 8D160000       LEA     DX,[0000] ------>偏址变成了0000,因为实际上msg也就是从头开始的。当然是0了。
1420:0009 B409           MOV     AH,09     ------->注意Debug里,默认的是十六进制
1420:000B CD21           INT     21
1420:000D B8004C         MOV     AX,4C00
1420:0010 CD21           INT     21

 

 

 

刚刚学习了8086/8088汇编语言,发现寻址方式非常重要,于是做了一个小总结,请各位笑纳。
概念:
     1.指令集:cpu能够执行的指令的集合。
     2.指令:cpu所能够执行的操作。
     3.操作数:参加指令运算的数据。
     4.寻址方式:在指令中得到操作数的方式。
现在就重点讨论寻址方式,说白了也就是cpu怎么样从指令中得到操作数的问题。另外再强调一点操作数还分种类:
1)数据操作数:全都是在指令当中参加操作的数据。
     1.立即操作数:它在指令中直接给出。
     2.寄存器操作数:它被放到寄存器中。
     3.存储器操作数:当然在存储器也就是内存中。
     4.i/o操作数:它在你给出的i/o端口中。
2)转移地址操作数:在指令当中不是参加运算或被处理的数据了,而是转移地址。
还可以按照下面分类方式:
1)源操作数src
2)目的操作数dst
源操作数都是指令当中的第2个操作数,在执行完指令后操作数不变。而目的操作数是指令当中的第1个操作数,在执行完操作指令后被新的数据替代。
我们就围绕这几种操作数,也就是操作数所在的位置展开讨论。
先说数据操作数,它分3大类共7种。
1)立即数寻址方式:是针对立即操作数的寻址方式。在指令当中直接给出,它根本就不用寻址。
例1:mov ax,1234h
     mov [bx],5678h
在这里1234h和5678h都是立即操作数,在指令当中直接给出。
2)寄存器寻址方式:是针对寄存器操作数的寻址方式,它在寄存器中我们就用这中方式来找到它。
例2:mov   bx,ax
     mov   bp,[si]
在这里ax,bx,ds都算是寄存器寻址,例1中的ax也是寄存器寻址方式。
3)存储器寻址方式:针对在内存中的数据(存储器操作数)都用这种方式来寻找,一共有5种(这是我自己的说法,便于记忆)。
不得不提及以下的概念:由于8086/8088的字长是16bit,能够直接寻址2的16次方也就是64kb,而地址总线是20bit,能够直接寻址2的20次方也就是1M空间,所以把内存分为若干个段,每个段最小16byte(被称为小节),最大64kb,它们之间可以相互重叠,这样一来内存就被分成以16byte为单元的64k小节,cpu就以1小节为单位寻址:在段寄存器中给出段地址(16bit),在指令当中给出段内偏移地址(16bit),然后把段地址左移4bit再与偏移地址求和就得到数据在内存当中的实际物理地址了,因而可以找到数据。
1.存储器直接寻址方式:在指令当中以   [地址]   的方式直接给出数据所在内存段的偏移地址。
例3:mov   ax,es:[1234h]
     mov   dx,VALUE
     mov   dx,[VALUE]
在这里[1234h]和VALUE就是在指令中直接给出的数据所在内存段的偏移地址(16bit)。
VALUE是符号地址,是用伪指令来定义的,它代表一个在内存中的数据(也就是它的名字)。es:是段前缀符,用来指出段地址,在这之前应该将段地址添入段中,本例中是es,默认是ds,也就是不需给出。应该注意   [地址]   与立即寻址的区别,在直接给出的数据两边加   []   表示存储器直接寻址,以区别立即寻址。另外   VALUE=[VALUE]。
2.寄存器间接寻址:不是在指令中直接给出数据在内存中的偏移地址,而是把偏移地址放到了寄存器中。
例4:mov   ax,[bx]
这里[bx]就是寄存器间接寻址,bx中应方入段内偏移地址。其中:若使用bx,si,di默认段地址为ds,若使用bp则默认段地址为ss,并且允许段跨越,也就是加段前缀符。注意:在寄存器两边加   []   以与寄存器寻址区别。
3.寄存器间接相对寻址:偏移地址是bx,bp,si,di中的内容再与一个8bit或16bit 的位移量之和。
例5:mov   ax,[bx]+12h
     mov   ax,[si]+5678h
     mov   ax,[bp]+1234h
在这里[bx]+12h,[si]+5678h,[bp]+1234h都是寄存器间接相对寻址。12h是8bit位移量,1234h和5678h是16bit位移量。若使用bx,si,di则默认段寄存器是ds,若使用bp则默认段寄存器是ss,并且允许段跨越。
4.基址变址寻址:偏移地址是一个基址寄存器和一个变址寄存器内容的和,既:bx或bp中的一个与si或di中的一个求和而得到。
例6:mov   ax,[bx+si]
     mov   ax,[bp+di]
上面[bx+si]和[bp+di]都是基址变址寻址。若使用bx做基址寄存器则默认段地址为ds,若使用bp为基址寄存器则默认段为ss,允许段跨越。
5.基址变址相对寻址:偏移量是一个基址寄存器一个变址寄存器只和再与一个8bit或一个16bit位移量只和得到。
例7:mov   ax,[bx+si]+12h
     mov   ax,[bp+di]+1234h
[bx+si]+12h和[bp+di]+1234h就是基址变址相对寻址。若使用bx做基址寄存器则默认段是ds,若使用bp做基址寄存器则默认段为ss。允许段跨越。

下面是转移地址操作数的寻址方式:
1)段内直接转移
     1.段内直接短转移:cs(代码段)内容不变,而ip(指令指针寄存器)内容由当前ip内容+(-127~127),在指令中直接给出。
例8:jmp   short   SHORT_NEW_ADDR
其中,short是段内短转移的操作符,用以指出是转移到当前位置前后不超过±127字节的地方。而NEW_ADDR是要转移到的符号地址,它的位置应该在当前ip指针所在偏移地址不超过
±127的地方。否则语法出错。
     2.段内直接近转移:cs内容不变,而ip内容由当前ip内容+(-32767~32767),在指令中直接给出。
例9:jmp   near   ptr   NEAR_NEW_ADDR
其中near ptr是段内近转移的操作符,用以指出转移到当前位置前后不超过±32767的地方。NEAR_NEW_ADDR是要转移到的符号地址。
2)段内间接转移:cs的内容不变,而ip的内容放在寄存器中或者存储器中给出。
例10:jmp   bx
       jmp   word   ptr   [bx]+1234h
这种寻址方式是在寄存器或存储器中找到要转移到的地址,而地址是16bit的,因而寄存器必须为16bit,如:bx,我们用word   ptr来指定存储器单元也是16bit的。注意:它是间接的给出,只能使用类似于数据操作数中的除立即寻址以外的6种寻址方式(就在上面)。
3)段间直接寻址:cs和ip的内容全都变化,由指令当中直接给出要转移到的某一个段内的某一个偏移地址处。
例11:jmp   1234h:5678h
       jmp   far   ptr   NEW_ADDR
1234h送入cs中作为新的段地址,5678h送入ip中作为新的偏移地址。far   ptr是段间直接转移操作符,NEW_ADDR是另外一个段内的偏移地址,在这个指令中把NEW_ADDR的段地址送入cs(不用你给出),把它的段内偏移地址送入ip中作为新的偏移地址。
4)段间间接寻址:cs和ip的内容全变化,由指令当中给出的一个4字节连续存储单元,其中低2字节送入ip作为偏移地址,高2字节送入cs作为段地址。
例12:jmp   dword   ptr   [bx][si]+1234h
       jmp   dword   ptr   [1234h]
       jmp   dword   ptr   [si]
dword   ptr是双字(4个字节连续存储单元)操作符,用来指出下面的存储单元是4个字节的。由于它是4个字节的,所以只能使用类似于数据操作数中的存储器寻址方式(共5种,还记得吗?)。


另外作为特殊的寻址方式还有三种:I/O寻址,串寻址,隐含寻址。它们都分别针对I/O指令,串操作指令以及无操作数的指令,而且都比较简单,读者自行总结。


到此为止说明了8086/8088cpu中的所有寻址方式,我这里只是个总结,具体的细节还要大家自己钻研课本,才能理解。
写的有些仓促可能有些遗漏或错误,还请谅解。

基于Keil 5编写汇编程序 本文目的是通过keil 5 编写汇编程序来熟悉汇编语言的相关知识。这里分为两个部分:第一个部分在Keil上练习汇编的编写和调试,同时了解一下Hex文件的格式;第二个部分是使用汇编进行stm32F103的点灯实验,用实战的方式来加深理解。 目录(一)汇编语言1.简介2.指令3.优缺点(二)使用Keil 5编写汇编程序1.新建汇编工程2.新建汇编文件 (一)汇编语言 1.简介 汇编语言(Assembly Language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。. 阅读详情

相关推荐

汇编程序基本原理

汇编语言是为特定的计算机设计的面向机器的符号化的程序设计语言。用汇编语言编写的程序称为汇编语言源程序。因为计算机不能直接识别和运行符号语言程序,所以要用专门的翻译程序——汇编程序进行翻译。 汇编程序的功能是将用汇编语言编写的源程序翻译成机器指令程序。汇编程序的基本工作包括将每一条可执行汇编语句转换成对应的机器指令;处理源程序中出现的伪指令。

qq_33501207的博客 1537

MOV AX,DATA MOV DS,AX

MOV AX,DATA MOV DS,AX 其实就是把data(数据) 转到 DS 数据段寄存器,让数据段指向正确的位置。 MOV AX,DATA起到过渡作用

z2431435的博客 2万+

《汇编语言》学习(四)汇编程序

《汇编语言》第四章主要介绍“汇编程序从源码编写到执行和调试的过程”,包括:源码编写、源码构成、编译和链接、加载和返回shell、运行和调试。     本章是一般原理性的内容,没有安排练习题,只有一个实验题。在此,我将用一个思维导出来总结本章的知识点,并分享我搭建实验环境的过程,和给出实验题调试过程。 一、知识图谱 二、环境搭建     本系列第一篇博文我就提到了,我的汇编学习环境是

Sagittarius_Warrior的博客 891

大话8086/8088cpu寻址方式

刚刚学习了8086/8088汇编语言,发现寻址方式非常重要,于是做了一个小总结,请各位笑纳。概念:    1.指令集:cpu能够执行的指令的集合。    2.指令:cpu所能够执行的操作。    3.操作数:参加指令运算的数据。    4.寻址方式:在指令中得到操作数的方式。现在就重点讨论寻址方式,说白了也就是cpu怎么样从指令中得到操作数的问题。另外再强调一点操作数还分种类:1)数据操作数:

如是所来的专栏 4265

在 Windows 上安装 OpenCV – C++ / Python

而且,安装并不是一件容易的事。这些安装程序仅适用于安装 OpenCV for C++。如果您想安装适用于 Python 的 OpenCV,您将在博客后面找到相关信息。在这篇博文中,我们将在 Windows 上安装适用于 C++ 和 Python 的 OpenCV。C++ 安装是在自定义安装 exe 文件的帮助下完成的。而Python的安装是通过Anaconda完成的。从源代码安装 OpenCV 需要花费大量时间。根据您的硬件和安装配置,该过程可能需要 5 分钟到 2 小时不等。

Demondai999的博客 2090

从零到一:龙芯杯参赛全攻略(含北理工学长经验PDF、B站培训视频与开源代码合集)

本文详细介绍了龙芯杯全国大学生计算机系统能力大赛的参赛全攻略,包括资源整合、技能树构建、团队协作和避坑指南。提供北理工学长经验PDF、B站培训视频与开源代码合集,帮助参赛者从零基础到站上领奖台。重点解析如何高效获取优质资源、避开新手常见陷阱及构建可落地的学习路径,助力普通学生系统学习CPU设计。

weixin_26802933的博客 538

汇编语言代码回顾

程序1: CODE SEGMENT ;段定义伪指令 ASSUME CS:CODE ;段约定伪指令 START:MOV DL,1 ;数据传送指令,源操作数立即寻址,目的操作数寄存器寻址,不影响6个状态标志 ADD DL,2 ;二进制数加法指令,源操作数立即寻址,目的操作数寄存器寻址,影响6个状态标志 ADD DL,30H ;二进制数加法指令,...

不忘初心,护天下安全! 8579

Halcon 3D点云处理实战:从PLY文件读取到曲面匹配的完整流程(附避坑指南)

本文详细介绍了Halcon在3D点云处理中的完整流程,从PLY文件读取到曲面匹配,特别强调了3D算子的应用技巧和避坑指南。通过实战案例和参数优化建议,帮助开发者高效处理工业视觉检测中的复杂点云数据,提升匹配精度和性能。

weixin_42535720的博客 277

学习汇编前你应该知道的知识

1、汇编需要什么工具和程序,到哪里下载? 目前阶段,汇编程序仅需要两个程序就够了。masm.exe,link.exe。前者是编译程序,后者是链接程序。另外,为了验证和调试程序,还需要一个程序debug.exe,该程序由windows本身就提供。将二者下载后,放到某一个目录中(任意目录都可以),考虑到很多命令需要通过键盘敲入,所以建议你不要把文件放入到长文件名目录、中文目录或很深的目录中。比如...

轻轻草原 2092

J-SCOPE实战:除了看波形,如何用它和JLink-RTT模式高效调试你的STM32变量?

本文详细介绍了如何利用J-SCOPE和JLink-RTT模式高效调试STM32变量,实现实时数据可视化。通过对比HSS和RTT模式的优劣,提供固件端配置、J-SCOPE设置及实战应用案例,帮助开发者快速掌握这一高效调试技术,特别适用于电机控制、传感器融合等需要实时监控的场景。

weixin_29159613的博客 444

Zipformer实战:5分钟快速搭建语音识别模型(附LibriSpeech测试结果)

本文提供了一份详细的Zipformer语音识别模型实战指南。通过清晰的步骤,指导读者在5分钟内完成从环境配置、LibriSpeech数据集准备到模型训练与测试的全过程。文章重点解析了关键配置参数,并分享了在LibriSpeech测试集上的性能结果,帮助开发者快速评估和应用这一高效的语音识别架构。

weixin_35578748的博客 159

汇编程序怎么写?

每一个汇编老师都会告诉你很多强的亚批的指令,但是不怎么说一个真正的、能跑起来的汇编程序长什么样。 在我学习的过程中,虽然有基本格式的讲解,但是说实话听着就很难受。 这也导致在上汇编实验的过程中,是属是难受。 从一个小程序说起 不是微信小程序啊,是比较短的汇编程序。 例:result=a+b data segment a db 1 b db 2 result db ? string db 'result=$’ data ends code segment assume cs:

筱羊冰冰 8204

ROS Motion Planning运动规划库安装方法及进阶使用方法详细介绍

​今天偶然发现了一个优质的运动规划库:ai-winter/ros_motion_planning,比较适合从事ROS移动机器人运动规划研究领域的小伙伴学习和使用,相比于莱斯大学Kavraki实验室提供的开源的著名运动规划库OMPL、或着我之前介绍过的zhm-real开源的zhm-real/MotionPlanning和zhm-real/PathPlanning运动规划库,今天介绍的ROS Motion Planning运动规划库与ROS机器人中常用的Navigation导航框架的兼容性更好,库中的运动规划

慕羽★的博客 5576

通过汇编程序理解汇编和链接过程

汇编代码简析 通过编写汇编程序,然后分析它的汇编和链接过程,对理解汇编程序中的各种汇编器指令和各种标签很有帮助。 首先介绍以下汇编器指令和标签这两个概念,观察下面一段求最大值的汇编程序代码maxmum.s: #目的:寻找一组数中的最大值 #寄存器有以下用途: # %edi - 保存正在检测的数据的索引 # %ebx - 当前已经找到的最大数据项 # %eax - 当前数据项 #使用以下内存位置: # data_items - 包含数据项 # 0表示数据结束 .section .dat

weixin_44395686的博客 3892

彻底解决tplink路由器无法访问部分https网站

彻底解决tplink无法访问部分https网站

renkai721的专栏 8762

在Ubuntu系统中安装和使用wxPython进行Python图形用户界面(GUI)开发

在本文中,我将向您展示如何在Ubuntu系统上安装和使用wxPython,并提供一些示例代码来帮助您开始使用这个强大的工具。在MyFrame的构造函数中,我们创建了一个wx.Panel和一个按钮,并将按钮的点击事件绑定到一个自定义的方法on_button_click上。最后,我们创建了一个wx.App的实例,创建了一个MyFrame对象并显示它,最后通过调用app.MainLoop()启动应用程序的主事件循环。这只是一个简单的示例,但它演示了如何使用wxPython创建一个基本的GUI应用程序。

qq_37934722的博客 1038

ARM 汇编学习——编写简单的ARM汇编程序

首先,我们先看一个简单的汇编程序: area ff,code,readonly ;声明代码段 code32 ;声明为32位ARM指令 entry ;声明程序入口 start ;b指令 ;1.b 跳转范围+_ 32M b + 标号 ;b start ;b stop ;2.bl 子函数调用 ;会把预取指令的地址保存在lr(r14) ;3.bx 子函数返回

知秋一叶 2万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

如何运行一个汇编程序,这些你知道吗?

第一步:下载DOSBox,链接如下:DOSBox, an x86 emulator with DOS。按照步骤一路next即可。 第二步:新建一个记事本,编写汇编程序,将后缀改成.asm格式。 第三步:挂载 dosbox是在windows环境下模拟dos环境的,在dos环境下只有一个C盘,所以我们必须为dos指定windows的哪个盘为它的C盘。dos打开后有两个框框,一个黑色,一个蓝色,挂载命令写在蓝色框框里,挂载的命令如下: mount c: e:\asm 即:把windows下E盘的asm

m0_52196532的博客 8711

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

汇编基础入门知识

学习汇编前你应该知道的知识 1、汇编需要什么工具和程序,到哪里下载? 目前阶段,汇编程序仅需要两个程序就够了。masm.exe,link.exe。前者是编译程序,后者是链接程序。另外,为了验证和调试程序,还需要一个程序debug.exe,该程序由windows本身就提供。 将二者下载后,放到某一个目录中(任意目录都可以),考虑到很多命令需要通过键盘敲入,所以建议你不要...

while_black的博客 2090

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

汇编程序的汇编及运行

汇编程序的汇编及运行

qq164457606的博客 2551
上一篇: 学习汇编前你应该知道的知识(三)------- 汇编指令
下一篇: 汇编语言的艺术(组合语言的艺术):第一节 应用工具
Linux先生
博客等级 码龄20年 97粉丝 43原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值