2015-12-22 22:48:24 baidu_31437863 阅读数 503

1.减法指令

1.带借位减法指令SUBB 
2.减1指令DEC
1:SUBB A,Rn;A<-A-Rn-C br />2.DEC A;A=A-1 DEC Rn;Rn=Rn-1 

2.位转移指令 

以C为条件
1.JC rel:假如psw寄存器中的c为1,则转移PC<-PC relbr />2.JNC rel :假如c=0,则转移PC<-PC relbr />以bit为条件
1.JB bit,rel:若bit该位为1,则转移PC<-PC relbr />2.JNB bit,rel:假如bit=0,转移PC<-PC relbr />3.JBC bit,rel:若bit该位为1,则转移PC<-PC relbit>

3.jc ,与jnc指令

判CY转移指令
JC rel
JNC rel
第一条指令的功能是如果CY等于1就转移,如果不等于1就顺序执行。
注意和JZ区分,一个是判断a的

4.条件转移指令 
条件转移指令是指在满足一定条件时进行相对转移。
判A内容是否为0转移指令
JZ rel
JNZ rel
第一指令的功能是:如果(A)=0,则转移,否则顺序执行(执行本指令的下一条指令)

5。转移,调用  
转移指令如条件转移等即转移到指定位置后边从转移到的指令继续往下执行。
调用总在子程序中如lcall,即调用后即执行子程序,子程序执行完后要返回到刚刚执行的地方。

所以两者区别:是否返回到原来位置


2017-10-04 19:53:15 m0_37454852 阅读数 451

ORG 汇编起始地址指令 //如果第一个ORG不是从0000H开始,则需要在ORG 0000H后放一条跳转语句,将其转向目标地址
END 汇编终止指令
DB 定义字节型数据命令 //相当于char
DW 定义字型数据命令 //相当于int数组
DS 定义存储区命令
EQU 赋值命令 //相当于宏定义
DATA 数据地址赋值命令 //与EQU有明显区别,稍后加
BIT 位地址符号定义命令
MOV 内部RAM数据传送指令 //相当于赋值
MOVX 外部RAM数据传送指令组
MOVC 程序存储器数据传送指令组
XCH 整字节交换指令
XCHD 半字节交换指令组
SWAP 累加器高低半字节交换指令
PUSH 堆栈操作指令(入栈) //SP=(SP)+1,(SP)=direct
POP 堆栈操作指令(出桟) //direct=((SP)),SP=(SP)-1、
ADD 加法指令
ADDC 带进位加法指令
INC 加一指令
DEC 减一指令
MUL 乘法指令
DIV 除法指令
DA 十进制调整指令//转换为BCD码
ANL 逻辑与
ORL 逻辑或
XRL 逻辑异或
CLR 累加器清零指令
CPL 累加器取反指令
RL 累加器循环左移
RR 累计器循环右移
RLC 累加器带进位循环左移
RRC 累加器带进位循环右移
LJMP 长转移指令
AJMP 绝对转移指令
SJMP 短转移指令
JMP 间接转移指令
JZ 累加器判零转移指令 //若A=0,则跳转
JNZ  累加器判零转移指令 //若A!=0,则跳转
CJNE 数值比较转移指令 //目的操作数>源操作数,则跳转,令CY=0; <则跳转,令CY=1; =则CY=0,顺序执行
DJNZ 循环转移指令 //减一后不为零则转移
LCALL 长调用指令
ACALL 绝对调用指令
RET 子程序返回指令
RETI 中断服务子程序返回指令
NOP 空操作
JC 以CY为内容为条件的转移指令 //若CY=1则转移
JNC 以CY为内容为条件的转移指令 //若CY=0则转移
  以位地址内容为条件的转移指令
JB bit, rel //若bit=1,则转移;否则顺序执行
JNB bit,rel //若bit=0,则转移
JBC bit,rel //若bit=1,则bit=0,转移;否则顺序执行

2019-07-03 22:44:58 Jiang_13314 阅读数 46

                                     汇编学习之基本指令1

               汇编                                  C语言
mov a,b用于将一个数据从源地址传送到目标地址              a = b

cmp ah,al ;ah-al>0,则减数不大于被减数。
cf置0,jnc(jump if not cf)条件成立,
则跳转到l2,ah为两者之中较大的一个

jae,jge
两者都是大于或等则跳转
jae用于无符号
jge用于有符号的

jmp跳转指令不止jmp,jmp是无条件跳转,jmp要配合条件跳转指令使用
loop 循环指令,由CX寄存器指定循环次数,程序中至少执行1次
mul,imul mul无符号整数乘法,IMUL有符号整数乘法
jnz xxx 判别CX是否为0,不为0跳转xxx
sal ax,1:每位左移, 低位补 0, 高位进 CF                ax *= 2


div,idiv 无符号数除法,带符号除法
字节操作:16位被除数在AX,8位除数为源操作数,结果的8位商在AL中,8位余数在AH中。
表示为
(AL)<-(AX)/(SRC) 的商
(AH) <-(AX)/(SRC) 的余数

 

2019-05-14 20:01:16 weixin_43656326 阅读数 129

汇编语言 实验五 条件转移指令

一、实验目的:

1.8088指令:JZ,JNZ,JC,JNC,CMP,SHR。

2.程序:用字符搜索法确定字符串长度。

3.程序:16进制数化为ASCII码的一般方法。

二、实验准备

1.

(1) 编写实验任务要求的两个程序。

(2) 写出调试以上程序,即修改程序参数,检查结果的操作方法。

(3) 熟悉源程序汇编、连接命令的使用方法即要回答的内容。

2.验证以下程序

16进制数化ASCII码的一般方法(显示内存内容)

1)用A命令在100H处键入下列程序:

MOV   SI,0 
MOV   BL,10 
LOP:  MOV   DL,[SI] 
MOV    CL,4 
SHR    DL,CL 
CMP    DL,0A 
JC	J1 
ADD	DL,7 
J1:  ADD	DL,30 
MOV	AH,2 
INT	21 
MOV	DL,[SI] 
AND	DL,0F 
CMP	DL,0A 
JC	J2 
ADD	DL,7 
J2:  ADD	DL,30 
MOV	AH,2 
INT	21 
MOV	DL,20 
MOV	AH,2 
INT	21 
INC	SI 
DEC	BL 
JNZ	LOP 
INT	20 

2)用N,W命令将此程序用CC.COM文件名存入磁盘。

3)用Q命令退出DEBUG。

4)在DOS命令状态下直接运行CC.COM命令文件,应在屏幕上显示出内存从0000H开始的16个字节的内容,若有错误,用DEBUG检查之。

三、实验任务

1.自编程序:修改实验准备程序(二),使除了以16进制数形式显示内存内容外,还能在其右边显示该16进制码所对应的ASCII字符,07-0D的控制字符用’.'代替。

2. BUFX、BUFY和BUFZ是3个有符号的十六进制数,编写一个比较相等关系的程序:

1)如果这3个数都不相等,则显示0

2)如果这3个数中有两个数相等,则显示1

3)如果这3个数都相等,则显示2

四、实验步骤

1) 用EDIT或其它编辑软件,编写.ASM源程序,

2) 对其进行汇编及连接,产生.EXE文件。

3) 对.EXE文件进行调试运行。

a. 用DEBUG调试运行。

b. 键入不同的字符,分别进行调试。

c. 在MS-DOS下运行这两个.EXE文件。

五、实验报告要求:

1.先完成准备实验

2.务2要求画出流程图,给出程序清单,给出调试结果,并存盘

3.实验体会。

实验内容代码:

1、

DATA SEGMENT 
DATA ENDS
STACKS SEGMENT STACK
STACKS ENDS
CODE SEGMENT 'code'
   ASSUME CS:CODE,DS:DATA,SS:STACKS
START:
   MOV AX,DATA 
   MOV DS,AX
   MOV	SI,0H
   MOV	BL,10H 
LOP:MOV	DL,[SI]  
   MOV	CL,4H	
   SHR	DL,CL		
   CMP	DL,0AH	
   JC	J1		
   ADD	DL,7H	
J1: ADD	DL,30H	
   MOV	AH,2H	
   INT	21H
   MOV	DL,[SI]		
   AND	DL,0FH
   CMP	DL,0AH		
   JC	J2
   ADD	DL,7H
J2: ADD	DL,30H
   MOV	AH,2H
   INT	21H			
   MOV	DL,20H		
   MOV	AH,2H
   INT	21H
   MOV DL,[SI]		
   MOV DH,06H	
   CMP DH,[SI]
   JNC J3
   MOV DH,0eH
   CMP [SI], DH
   JNC J3
   MOV DL,2EH		
J3: MOV AH,2H		
   INT 21H
   MOV	DL,20H	
   MOV	AH,2H
   INT	21H
   INC	SI			
   DEC	BL			
   JNZ	LOP
   MOV ax,4C00H
   INT 21H
CODE ENDS
   END START

在这里插入图片描述在这里插入图片描述在这里插入图片描述

2、

DATA SEGMENT 
DATA ENDS
STACKS SEGMENT STACK
STACKS ENDS
CODE SEGMENT 'code'
   ASSUME CS:CODE,DS:DATA,SS:STACKS
START:
   MOV AX,DATA
  	MOV DS,AX
   mov ah, 01h
   int 21h
   mov bh, al
   mov dl,20h
   mov ah,02h
   int 21h

   mov ah, 01h
   int 21h
   mov bl, al
   mov dl,20h
   mov ah,02h
   int 21h

   mov ah, 01h
   int 21h
   mov dh, al
   mov dl,0ah
   mov ah,02h
   int 21h
   		
          mov dl, 30h
          cmp bh,bl	
          jnz next1	
          inc dl		
next1:     cmp bh,dh 
          jnz next2	
          inc dl
next2:     cmp bl,dh
          jnz next3	
          inc dl	
next3:     cmp dl,33h	
          jb next4 	
          mov dl,32h	
next4:     mov ah,02h  
          int 21h
MOV ax,4C00H
INT 21H	
CODE ENDS
   END START

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

2014-01-10 11:49:01 wuda0112 阅读数 1345

java抓取、java网络爬虫实例项目jnc源码托管在:


http://code.taobao.org/p/jnc/src/trunk/


用svn客户端下载下来即可,直接运行test包下的Crawl.java就可以快速启动测试

测试:直接运行test包下的Crawl.java

UrlBean host = UrlUtil.getUrlBean("http://www.sina.com.cn/");  //抓取入口
UrlScheduler.addNewHost(host);//添加一个主机(在程序的运行中会不断添加新发现的主机)


Config config = new Config(); //抓取的各种配置
config.setAnalyzer(new Analyzer()); //分析器
config.setStorage(new Storage()); //存储器
config.setThreadCount(4); //每个主机下的线程数
config.setTimeOut(3000); //超时时间
config.setUrlScheduler(new UrlScheduler());
Set<String> url_uncontains = new HashSet<String>(); //URL中不能包含的字符
url_uncontains.add("javascript");
url_uncontains.add("\\?");
config.setUrlUnContains(url_uncontains);


HostTarget target = new HostTarget(config);
target.start(); //开始抓取


在实际中,一般抓取分为定向抓取和通用抓取,所谓定向就是针对某一个或者某一类网站做特定分析,抓取;比如你的公司是做招聘行业的,那么你就只关心招聘相关的内容,所以抓取的时候就可以只针对51job等网站做特定分析;所谓通用抓取就是看到网页就会抓取,但是它只提取网页的<title>、<keywords>、<description>等内容,因为每个网页的布局都不一样,不可能智能到提取你想要的任何内容。因为我也没什么特定的需求,所以就写了一个简单的通用的java抓取,我给它命名为jnc.

  下面介绍下jnc的主要特点和流程(本来有张图的,但是放这里太小了,看不清,在程序的docs目录下,下载以后可打开看下):

1.在一个主机下抓取完它的所有网页后才切换到另外一个主机下抓取,每一个主机下可以指定抓取线程数。比如:我现在正在csdn.net主机下抓取,然后配置了5条抓取线程,在这个主机下抓取的时候,肯定会收集到其他主机的url,比如网易的url,但是我不会立即到刚刚收集的这个网易的URL里去抓取,因为它不是我正在抓取的csdn这个主机下的,我是把它保存在一个待抓取主机队列中,当csdn这个主机下的所有网页都抓取完了,才会从这个待抓取主机队列里获取一个新的主机来继续抓取,这个过程我把它定义为切换主机,这个过程是在HostTarget和UrlScheduler(URL调度器)来完成,正如这两个类的名字一样,在一个目标主机下抓取(HostTarget),然后找个助手(UrlScheduler)来帮我管理这些URL。你可能想同时抓取多个主机,比如同时抓取网易,新浪,csdn,这当然是可以的,你只需要在一个for循环中实例化多个HostTarget和UrlScheduler

2.抓取回来的网页在Analyzer中进行分析,提取你想要的内容

3.保存提取出的内容,根据自己的需要,比如我这里只是打印看一下,当然也可以保存到数据库或者其他文件系统里面

4.过滤,比如你想收集你初恋女友的信息(哈哈),你就只关心含有她名字的网页,其他的都不处理。^-^


需要注意的是,在UrlScheduler(URL调度器)中,有四个队列,分别是:


对于主机:

1.新的未抓取的主机列表

2.已经抓取的主机列表(避免重复抓取)


对于当前正在抓取的主机下的url:

1.这个主机下待抓取的URL

2.这个主机下已经抓取的URL(避免重复抓取)


根据上面说的抓取流程,我们可以理解:对于当前正在抓取的主机下的url队列,每当切换主机后,这两个队列就会清空,然后保存切换后的主机下的URL,所以内存会有增有减;但是另外两个队列是一直增大的,内存会一直增加;当程序运行久后内存就有可能溢出,哈哈,这不是问题,这四个队列其实很容易用数据库或者内存服务器比如redis等来替换,只是因为我这里不想和这些东西耦合,只提供一个独立java抓取jar包,所以才这样做。

jnc对于一般入门,测试还是有帮助的,因为毕竟只是花了2个星期六和星期天的时间写的,也未进行过任何优化,所以在大牛们面前就实在献丑了,但是在我自己的笔记本电脑上我边看电视边运行抓取,还好,2天1夜连续抓取未间断!后面是我自己关掉了,毕竟我还要睡觉^-^


MCS-51汇编指令

阅读数 449

单片机

阅读数 1122

汇编常用指令三

阅读数 172

没有更多推荐了,返回首页