吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3380|回复: 3
收起左侧

[其他转载] 【汇编笔记】ASCII码应用和大小写转换+DIV除法指令的使用

[复制链接]
嵌入式.h 发表于 2017-8-26 13:28
本帖最后由 嵌入式.h 于 2017-9-6 14:52 编辑

[Asm] 纯文本查看 复制代码
ASSUME CS:HIKE, DS:DATA; 假设代码段,数据段
DATA SEGMENT;数据段开始
     DB 'HiKeRy';defined byte 定义6个字节型字符数据ASCII码对应数:72,105,75,101,82,121    hex:48H,69H,4BH,65H,52H,79H
         DB 'www.52pojie.cn';defined byte 定义14个字节字符数据ASCII码对应数hex:77,77,77,2E,35,32,70,6F,6A,69,65,2E,63,6E,
DATA ENDS;数据段结束
HIKE SEGMENT;代码段开始
   GO:MOV AX,DATA;将数据段送入寄存器中、
     MOV DS,AX;设置ds指向DATA数据段
     MOV BX,0;设置偏移地址为0,我们常用bx寄存器来存放偏移地址
     MOV CX,6;循环6次、等下我们要将HiKeRy全部转换成小写字母、cx寄存器存放循环的次数
 DO: MOV AL,[BX];将DS:[BX]的字节数据放入AL(低8位寄存器) 
         OR AL,00100000B;将AL的数据和00100000相或、OR指令: 位与位相或、都为0才为0、其他都为1
     MOV [BX],AL;把处理后的数据放回内存中、
         INC BX;偏移地址自增1、类似高级语言的(i++)
         LOOP DO;CX-1、 跳到do标记地址处继续执行程序、cx为0则向下执行
         MOV CX,5;设置循环次数5次、这次我们要[url=http://www.52pojie.cn]www.52pojie.cn[/url]中的pojie转成大写
         ADD BX,6;把偏移地址定位到p这个ASCII码的内存单元
ONLY:MOV AL,[BX];数据送入交换寄存器
     AND AL,11011111B;这次转换用的是逻辑与、与逻辑或、逻辑相反、位与为相与、都为1才为1、其他都为0
         MOV [BX],AL ;再把处理后的数据放会内存
         INC BX;偏移地址再增1
         LOOP ONLY;又要循环了……
         MOV AX,4C00H;上面的工作完成了、程序返回。
         INT 21H;
HIKE ENDS;代码段结束了
END GO;程序结束了、我们去编译、debug调试看看
         


编译后、debug 我们的程序先看看我们定义在内存中的CSCII码
内存中的数据.jpg

继续调试
小写.jpg
大写.jpg
*********************************************************************************************
DIV指令
[Asm] 纯文本查看 复制代码
ASSUME CS:HIKE, DS:DATA;演示代码-我们只需要假设一个代码段和一个数据段就好了
DATA SEGMENT;数据段开始
    DD 03e8h ; defined double word 开辟一个双字形数据空间里面存放1000(十进制)、16进制为03e8“被除数32bit”
	DW 100 ; defined word  字形数据100(十进制)16进制为64“除数16bit”
	DW 0;defined word 定义一个字形数据空间、用来存放结果
DATA ENDS;数据段结束
HIKE SEGMENT;代码段开始
   GO:MOV AX,DATA;把数据段放到ax寄存器中、GO:为程序的入口标志(程序从这里开始执行)
      MOV DS,AX; 把数据段放入段寄存器中
	  MOV AX,DS:[0];把一个word(字形数据)放入ax(16位寄存器)、所以这里取的是两个内存单元数据(ds:[0] ds:[1])\被除数的低16位
	  MOV DX,DS:[2];把高16位放入dx寄存器中、《被除数为32位所以要用两个16位寄存器存放、ax存放低16位、dx放高16位》
	  DIV WORD PTR DS:[4];除以数100、word ptr:数据长度
	  MOV DS:[6],AX;把结果放入内存中
	  MOV AX,4C00H;程序返回
	  INT 21H
HIKE ENDS ;代码段结束
END GO ;程序结束

debug调试:
2017-09-06_143632.jpg 2017-09-06_144459.jpg

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

fq645122 发表于 2017-8-26 14:33
可以,笔记很有用的
妲己再美终是妃 发表于 2017-8-26 15:17
bopo 发表于 2017-8-28 09:54
平淡哥 发表于 2017-8-28 22:20

感谢分享笔记。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-27 01:16

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表