自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(151)
  • 收藏
  • 关注

原创 8086汇编-35更灵活定位内存地址04

(其实什么行啊列啊的,没啥用,都是比喻,整的反倒更加抽象了让人听不懂了,懂的不用听,不懂的也听不懂,云里雾里的,就是套两层循环,你不套第二层循环也可以 ,无非就是多写点代码)我们用bx来作变量,定位每行的起始地址,用si 定位要修改的列,用 [bx+si] 的方式来对目标单元进行寻址,我们用bx作变量,定位每行的起始地址,用3定位要修改的列,用[bx+idata]的方式来对目标单元进行寻址,从[idata]一直到[bx+si+idata],我们可以用更加灵活的方式来定位一个内存单元的地址。

2023-02-17 13:23:12 316 1

原创 8086汇编-34更灵活定位内存地址03

将一个内存单元的内容送入ax,这个内存单元的长度为2字节(字单元),存放一个字,偏移地址为bx中的数值加上si中的数值,段地址在ds中。现在我们要对datasg 段中的数据进行复制,我们先来看一下要复制的数据在什么地方,datasg:0,这是要进行复制的数据的地址。[bx+si]表示一个内存单元,它的偏移地址为(bx)+(si)(即bx中的数值加上si中的数值)。[bx+si]和[bx+di]的含义相似,我们以[bx+si]为例进行讲解。[bx+si+idata]和[bx+di+idata]

2023-02-16 09:58:22 316

原创 8086汇编-33更灵活定位内存地址02

将一个内存单元的内容送入ax,这个内存单元的长度为2字节(字单元),存放一个字,偏移地址为bx中的数值加上200,段地址在ds中。这两个字符串在内存中的起始地址是不一样的,但是,它们中的每一个字符,从起始地址开始的相对地址的变化是相同的。[bx+idata]表示一个内存单元,它的偏移地址为(bx)+idata(bx中的数值加上idata)。现在,我们有了 [bx+idata]的方式,就可以用更简化的方法来完成上面的程序。我们观察datasg段中的两个字符串,一个的起始地址为0,另一个的起始地址为5。

2023-02-15 16:37:20 457

原创 8086汇编-32更灵活定位内存地址01

db ‘unIX’ ” 相当于“db 75H,6EH,49H,58H”, “u”、 “n”、 “I”、 “X”的ASCII码分别为75H、6EH、49H、58H;“db ‘foRK’ ” 相当于“db 66H,6FH,52H,4BH”, “u”、 “n”、 “I”、 “X”的ASCII码分别为66H、6FH、52H、4BH;首先分析一下,我们知道同一个字母的大写字符和小写字符对应的 ASCII 码是不同的,比如 “A” 的 ASCII 码是41H,“a”的ASCII码是61H。

2023-02-08 04:48:19 276

原创 8086汇编-31包含多个段的程序03

该段实际占有的空间为 16*(N/16+1), N/16 求的是 有多少个16字节的最小段, +1 是避免超出部分,毕竟没有半个段一说. 再 乘 外面的 16, 是将 括号内(N/16+1)得到的最小段数量 乘 16,得。data段的段地址为 X+3,stack段的段地址为X+4. 因为在同一个程序中,这些地址都是连续的. 一个段最小为16 个字节!data段的段地址为 X-2,stack段的段地址为X-1. 因为在同一个程序中,这些地址都是连续的. 一个段最小为16 个字节!

2022-12-31 12:17:09 755

原创 8086汇编-30包含多个段的程序02

stack 其实被编译器翻译后,就是一个地址. 总之,CPU到底如何处理我们定义的段中的内容,是当作指令执行,当作数据访问,还是当作找空间,完全是靠程序中具体的汇编指令,和汇编指令对CS:IP、SS:SP、DS等寄存器的设置来决定的。也可以说,开辟了8个字的内存空间,这段空间中每个字单元中的数据依次是 : 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H。(2) 下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,数据的传送用栈来进行。

2022-12-29 15:19:40 286

原创 8086汇编-29包含多个段的程序01

CPU在执行程序的时候,由于我们把该程序的数据都定义在了代码段,而从dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h 这段代码只是声明数据,被翻译成代码段的指令后,就会出现 错误指令,导致整个程序的指令都变乱了。注意在上面程序中加入的新内容,我们在程序的第一条指令的前面加上了一个标号start,而这个标号在伪指令end的后面出现。因为用dw定义的数据处于代码段的最开,所以偏移地址为0,这8个数据就在始代码段的偏移0、2、4、6、8、A、C、E处。

2022-12-29 15:16:09 538

原创 8086汇编-28[BX]和Loop指令06

在一般的PC机中,DOS方式下,DOS和其他合法的程序一般都不会使用0:200~0:2FF( 0:200h~0:2FFh)的256 个字节的空间。(4)我们用将0:200~0:20b用0020:0~0020:b描述,就是为了使目标单元的偏移地址和源始单元的偏移地址从同一数值0开始。改进的程序中,使用 es 存放目标空间0020:0~0020:b的段地址,用ds存放源空间ffff:0~ffff:b的段地址。上机调试,跟踪运行结果。(3)在循环中,源单元ffff:X和目标单元的0020:X的偏移地址X是变量。

2022-12-26 14:30:59 671 1

原创 8086汇编-27[BX]和Loop指令05

这也不行,因为dl是8位寄存器,能容纳的数据的范围在小 255 之间,ffff : 0~ffff:b中的数据也都是 8 位,如果仅向dl中累加12个 8 位数据,很有可能造成进位丢失。ffff:0~ffff:b内存单元中的数据是字节型数据,范围在0~255之间,12个这样的数据相加,结果不会大于 65535 ,可以在dx中存放下。“mov al,[bx]”中的 bx就可以看作一个代表内存单元地址的变量,我们可以不写新的指令,仅通过改变bx中的数值,改变指令访问的内存单元。---- 看不懂没关系哦.

2022-11-16 16:43:44 190

原创 8086汇编-26[BX]和Loop指令04

在MASM中mov ax, [2]是解释为mov ax,2的。一般我们是通过BX来代替,像这道题我们先mov bx, 2 再通过mov ax, [bx]来实现。示例任务:将内存2000:0、2000:1 、2000:2、2000:3单元中的数据送入al,bl,cl,dl中。但是在汇编源程序中,指令“mov ax,[0]”被编译器当作指令“mov ax,0”处理。该形式就是我们在OD 中看到的!我们以后在编译器中也应该如此进行编译!在masn 编译器中 下面的汇编指令 其真正会被编译成?

2022-11-09 15:15:52 166

原创 8086汇编-25[BX]和Loop指令03

***************************************重点!所以,若实现ffff:0006单元向ax 赋值,我们应该令(ah)=0,(al)=(ffff6H),如果直接赋值的话,有可能把XX 后面的高位内容赋值到ax中.ffff:0006单元中的数据是XXH,若要ax中的值和ffff:0006单元中的相等,ax中的数据应为00XXH。我们说的是“赋值”,就是说,让 ax 中的数据的值(数据的大小)和ffff:0006 单元中的数据的值(数据的大小)相等。总不能跟踪123次吧……

2022-11-05 18:36:15 202

原创 8086汇编-24[BX]和Loop指令02

② 判断cx 中的值,不为0 则转至标号s 所标识的地址处执行(这里的指令是“add ax,ax),如果为零则执行下一条指令(下一条指令是mov ax,4c00h)。所以,我们可以利用cx来控制add ax,ax的执行次数。2^3=2*2*2,若设(ax)=2,可计算:(ax)= (ax)*2*2,最后(ax)中为2^3的值。(ax)= (ax)*2*2*2*2*2*2*2*2*2*2*2,最后(ax)中为2^12的值。设(ax)=2,可计算:(ax)= (ax)*2,最后(ax)中为2^2的值。

2022-11-03 12:13:29 447

原创 8086汇编-23[BX]和Loop指令01

在学习之前要说明一点,我们在编译器 编译后的文件,在Debug 中调试,会发现如 mov ax,[1] 这种代码 直接变成 mov ax,01 了,编译器不支持 [1] 这种格式. 但是Debug 是支持的,所以我们要进行传输偏移地址的话往下看.mov [bx], al指令执行前: ds=2000H, bx=1005H,则mov [bx],al将把al中的数据送入内存2000:1005处。mov ax,[idata]就代表mov ax,[1]、mov ax,[2]、mov ax,[3]等。

2022-11-02 15:58:19 252

原创 8086汇编-22第一个程序03

在DOS中,可执行文件中的程序P1若要运行,必须有一个正在运行的程序P2 ,将 P1 从可执行文件中加载入内存,将CPU的控制权交给它,P1才能得以运行;Debug 可以将程序加载入内存,设置CS:IP指向程序的入口,但Debug并不放弃对CPU 的控制,这样,我们就可以使用Debug 的相关命令来单步执行程序 ,查看每条指令指令的执行结果。它将程序加载入内存后,如何使程序得以运行?程序加载后,ds中存放着程序所在内存区的段地址,这个内存区的偏移地址为 0 ,则程序所在的内存区的地址为:ds:0;

2022-11-01 16:50:25 278

原创 8086汇编-21第一个程序02

就向 在驾校学开车一样, 车只有一辆,但是学员有很多,我学习的时候,其他人在边上等着,其他人如果想学习,就需要我停下来,把车子让给别人,让其他人学习,这个时候我的学习进度暂停了,其他人学习完毕轮到我了,我。codesg:放在segment的前面,作为一个段的名称,这个段的名称最终将被编译、连接程序处理为一个段的段地址。masm 源文件.asm 进行编译 编译后会生成一个 .obj 后缀的文件,此文件是二进制文件,也就是把源程序文件 编译成了 机器码,加入了一些其他信息,然后使用。

2022-10-31 18:01:57 422

原创 8086汇编-20第一个程序01

操作系统依照可执行文件中的描述信息,将可执行文件中的机器码和数据加载入内存,并进行相关的初始化(比如:设置CS:IP指向第一条要执行的指令),然后由CPU执行程序。End 是一个汇编程序的结束标记,编译器在编译汇编程序的过程中,如果碰到了伪指令 end,就结束对源程序的编译。segment和ends是一对成对使用的伪指令,这是在写可被编译器编译的汇编程序时,必须要用到的一对伪指令。我们可以将源程序文件中的所有内容称为源程序,将源程序中最终由计算机执行处理的指令或数据 ,成为程序。ends 定义的段相关联。

2022-10-27 21:29:10 190

原创 8086汇编-19-寄存器(内存访问)07

任意时刻,SS:SP指向栈顶元素,当栈为空的时候 ,栈中没有元素 ,也就不存在栈顶元素,所以SS:SP只能指向栈的最底部单元下面的单元 ,该单元的偏移地址为栈最底部的字单元的偏移地址+2 ,栈最底部字单元。对于栈段,将它的段地址放在SS中,将栈顶单元的偏移地置放在 SP 中,这样CPU在需要进行栈操作的时候,比如执行 push、pop 指令等,就将我们定义的栈段当作栈空间来用。SP原来为FFFEH,加2后SP=0,所以,当栈为空的时候,SS=1000H,SP=0。这完全是我们自己的安排。

2022-10-23 16:59:31 374

原创 8086汇编-18寄存器(内存访问)06

描述的有点迷,这一道题的意思就是,让我们先把10000H 设置成栈顶,把1000FH,设置成栈底,然后把AX,BX,DS 的数据push进栈.从上面的程序我们看到,用栈来暂存以后需要恢复的寄存器中的内容时 ,出栈的顺序要和入栈的顺序相反,因为最后入栈的寄存器的内容在栈顶 ,所以在恢复时,要最先出栈。push、pop 实质上就是一种内存传送指令,可以在寄存器和内存之间传送数据,与mov指令不同的是,push和pop指令访问的内存单元的地址不是在指令中给出的,而是由SS:SP指出的。提示:SS、SP指示栈顶;

2022-10-20 00:22:45 546

原创 8086汇编-17寄存器(内存访问)05

(1)SP=SP–2;我们可以自己去执行一下就知道了,每次执行都查看一次内存,看看内存有什么变化, 执行结束后,我们很直观的发现我们每次 mov 寄存器,数据,变化的只有寄存器的值,内存是不会改变的,但是当我们push 寄存器 的时候,内。因为啊,我们的内存是从 低位往高位存放的,也就是从上向下存放的,但是栈 是先进后出的模式,栈的数据都是先进来在下面的,向瓶子一样,那么我要存放一个内存,当然要把放内存的位。存可就有变化了,而且这个 值 可不是按照顺序的放在 栈的最上面的,而是放在 栈的最下面的哦!

2022-10-16 19:40:00 129

原创 8086汇编-16寄存器(内存访问)04

(1)SP=SP–2;我们可以自己去执行一下就知道了,每次执行都查看一次内存,看看内存有什么变化, 执行结束后,我们很直观的发现我们每次 mov 寄存器,数据,变化的只有寄存器的值,内存是不会改变的,但是当我们push 寄存器 的时候,内。因为啊,我们的内存是从 低位往高位存放的,也就是从上向下存放的,但是栈 是先进后出的模式,栈的数据都是先进来在下面的,向瓶子一样,那么我要存放一个内存,当然要把放内存的位。存可就有变化了,而且这个 值 可不是按照顺序的放在 栈的最上面的,而是放在 栈的最下面的哦!

2022-10-15 15:43:10 567

原创 8086汇编-15寄存器(内存访问)03

add 内存单元,寄存器 比如:add [0],ax 但是这里 向内存中 直接存放数据,就和上面说的不同了,向内存中直接放数据 就是有多少放多少.[0] 只是说明 数据的最低位放在这,也就是开始的地方.add 寄存器,内存单元 比如:add ax,[0] 这里我要再次说明一次, ax 十六位寄存器,能存放十六位也就是2个字或者说 1个字 的数据,超过位数的数据高位会被暂时丢弃.

2022-10-14 21:22:04 412

原创 8086汇编-13~14寄存器(内存访问)01~02

就是 mov al,[0] 这样,意思就是 将 内存 0:0 地址中的数据值,送入al 寄存器中 , 这个时候ds == 0000,而[0] 就是ds 的偏移。add bx,[1] 这里也要注意.因为bx 是16位寄存器,所以与其做add 运算的另一个数据也必须是 16位的,高位有就补上,没有就补0, 就和古时候娶亲一样,要门当户对!用mov al,[0]完成传送(mov指令中的[]说明操作对象是一个内存单元,[]中的0说明这个内存单元的偏移地址是0,它的段地址默认放在ds中)

2022-10-11 23:26:39 232

原创 8086汇编-12-寄存器(CPU工作原理)07

这里是直接向内存中写入 格式是,e 内存地址 ,然后按回车后,就会让我们输入要修改的值. (ROM内存的数据是无法改写的),连续的地址可以 用空格 例如e 1000:0 11 22 33 44。直接输入r,就是查看所有寄存器的值. r ax 就是只查看ax 寄存器的值,在使用"r ax"这个指令之后,还可以更改ax 寄存器的数值,想要更改哪个寄存器,就r 哪个寄存器,可以修改。直接输入d,可以查看当前位置的内存,如果想要查看哪个地方的内存,就需要输入 "d 内存地址" ,然后按回车后,然后就可以查看到了.

2022-10-08 20:42:44 106

原创 8086汇编-11寄存器(CPU工作原理)06

#pragma once/* 11-寄存器(CPU工作原理)06 实验一 查看CPU和内存,用机器指令和汇编指令编程 使用DEBUG程序: (不懂的自己搜索怎么下载安装,win10 不能直接用,需要用DosBox程序进行挂载Debug 程序使用) R命令查看、改变CPU寄存器的内容; 直接输入r,就是查看所有寄存器的值. r ax 就是只查看ax 寄存器的值,在使用"r ax"这个指令之后,还可以更改ax 寄存器的数值,想要更改哪个寄存器,就r 哪个寄存器,可以修

2022-10-06 13:32:30 415

原创 8086汇编-10寄存器(CPU工作原理)05

答案:4次修改IP,最后IP的值是 寄存器ax 的值. sub 指令是减法,虽然我们没有学,但是可以科普下, sub ax,ax 等同于 ax = ax-ax ,所以 ax = 0000H ,那么也就说明了最后一次 IP的值是ax 也就是 0000H.8086CPU为CS、IP提供了另外的指令来改变它们的值:转移指令 也就是jmp ,大家也叫他跳转,当我们使用jmp 指令跳转到 一个地址后,CPU就会在这个地址开始执行代码,一直向下执行,我们知道CS与IP 它们指示了CPU当前要读取。

2022-10-05 22:28:37 629

原创 8086汇编-9寄存器(CPU工作原理)04

可以理解为,在内存中有一个16进制的地址,该地址占用了64K的内存,我们找到的 16进制地址只是地址的头部,从头部到尾部就是一个段,因为没有明确的表明尾部是哪里,所以就采用了偏移的方式.内存并没有分段,段的划分来自于CPU,由于8086CPU用“(段地址×16)+偏移地址=物理地址”的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。以后,在编程时可以根据需要,将若干地址连续的内存单元看作一个段,用段地址×16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。即段地址和偏移地址。

2022-10-03 20:07:30 588

原创 8086汇编-8寄存器(CPU工作原理)03

物理地址=段地址×16+偏移地址 十六进制 ×16 等于整个数据向左移一位.换成二进制就是向左移动4位例如:段地址 = 1230H , 1230H == 4656D(D代表十进制) ,要知道我们的乘法除法都是十进制的,所以,我们要转。换成十进制来计算,4656D×16 == 74496D == 12300H.从这里开始就已经是20位了,再把后面的偏移地址加上就是物理地址. 任何进制的数(转换成十进制) 乘 它的进制的位数 都是向左移1位。段地址的概念 和 偏移地址的概念 已经引出了。

2022-10-01 14:10:52 526

原创 8086汇编-7寄存器(CPU工作原理)02

当16位寄存器的8位寄存器单独拿出来计算的时候,并且最后要存储的值超出了8位的大小,那么也和上面一样,多出去的高位被丢掉了.只保留能存放的数据.例如 AX 16位寄存器有两个 8位寄存器,一个是高位 AH,一个是低位AL 寄存。也就是说,计算机中的数据大多是由1~N个8位数据构成的。器,当我们把AX 16位寄存器分开来分拨用AH和AL来表示的时候,这个时候AH 或者AL 就是独立的8位寄存器了,使用他们也应该独立的去计算,虽然它们改变会影响AX 16位寄存器的值,但是也是独立的.汇编指令不区分大小写!

2022-09-28 13:33:11 146

原创 8086汇编-6寄存器(CPU工作原理)01

这就不用解析了吧. 十六进制的最高位索引是15,那么最高位就是 2^15, 我们要求,最大值当然是拿到索引16的值,然后减1.而不是,2^15+2^14+2^13......这么下去.AH和AL寄存器是可以独立使用的8位寄存器 这两个寄存器如果在一起那么高位和地位要合并在一块看,如果分开,就是单独的寄存器,都是8位。8086CPU的8位寄存器数据存储情况,一个8位寄存器所能存储的数据的最大值是多少?

2022-09-27 00:12:14 306

原创 8086汇编-5基础知识05

在8086PC机的内存地址空间分配00000 到 9FFFF 是 主存储器地址空间(RAM 内存) ,A0000 到 BFFFF 是显存地址空间 , C0000 到FFFFF 是各类ROM 地址空间,其中 "00000 到 9FFFF 是 主存储器地址空间(RAM 内存)"要记一下!最终运行程序的是CPU,我们用汇编编程的时候,必须要从CPU角度考虑问题,用其他语言也必须要以汇编的思想从CPU角度考虑问题!统一的逻辑存储器中,它的容量受CPU寻址能力的限制。不同的计算机系统的内存地址空间分配情况是不同的。

2022-09-24 23:43:00 93

原创 8086汇编-4基础知识04

则它们一次可以传送的数据为: ( ) (B)、 ( ) (B)、 ( ) (B)、 ( ) (B)、 ( ) (B)。(5)8080、8088、80296、80386的地址总线宽度分别为16根、20根、24根、32根,则它们的寻址能力分别为: ( ) (KB)、 ( ) (MB)、 ( ) (MB)、 ( ) (GB)。(一个内存单元=1Byte)。(7)512、256 解题:8086的数据总线宽度为16根(即一次传送的数据为2B)1024B/2B=512,同理1024B/4B=256。

2022-09-23 02:40:25 108

原创 8086汇编-3基础知识03

8088CPU数据总线上的数据传送情况(8位) 89D8H 这个H表示的是16进制的数据 进制转换的时候有提过. 那么数据就是 89D8 在VS编译器中可以写成0x89D8,8位传输就需要2次了,分别是89 和 D8.CPU的地址总线的宽度为N 表示是多少位CPU.1个地址总线可以索引1个内存单元,1个内存单元就是1个字节(Byte),1个字节就是8位(bit)市面上的软件有很多是64位的,想要达到完全的64位需要,CPU是64位的,操作系统是64位的,程序也是64位的,缺一不可!

2022-09-23 02:34:12 211

原创 8086汇编-2基础知识02

读就是 CPU 在 地址线 发送一个对应地址编号,在地址编号中有内存数据,然后CPU 在 控制线 中发送要读的指令过去,选中存储器的芯片,并且通知它,将要从中读取数据, 然后在 数据线 该内存中的数据就会。写就是 CPU 在 地址线 发送一个对应地址编号,在地址编号中有内存数据,然后CPU 在 控制线 中发送要写的指令过去,选中存储器的芯片,并且通知它,将要从中写入数据,然后在 数据线 从CPU 存放数据的器。指令和数据是应用上的概念。磁盘的容量单位同内存的一样,实际上以上单位是微机中常用的计量单位。

2022-09-22 15:32:50 339

原创 8086汇编-1基础知识01

汇编指令一般都是3个字节(这里说的是汇编指令,例如mov ,而不是特征码!mov AX,BX 把参数2,赋值给参数1 AX=BX。寄存器:简单的讲是CPU中可以存储数据的器件,一个CPU中有多个寄存器。汇编指令是机器指令便于记忆的书写格式,与机器语言是一一对应的.AX是其中一个寄存器的代号,BX是另一个寄存器的代号。操作:寄存器BX的内容送到AX中。

2022-09-22 15:30:15 74

原创 8086汇编-0进制转换

1011 1101 1010 1010(2进制) == BDAA(16进制) == (8+0+2+1) + (8+4+0+1) + (8+0+2+0) + (8+0+2+0) (10进制)A==10 B==11 C==12 D==13 E==14 F==15 这里没有16,因为是从0开始的. 就像二进制 只有0和1 ,与十进制不一样,0*(2 的5次方) == 0 这里等于 0*32 ,0乘啥都等于0。

2022-09-22 01:14:53 562

原创 声明以上第一行代码资料

第一行代码学习记录均为早期书籍刚出版时还没有电子版,本人一点点抄书码字,并且学习做记录的总结经验,现如今已经有了PDF版本的,可以直接网络搜索PDF版本的查看,并非看本人写的,毕竟早期的版本还是有很多刊误的,本人提交的刊误就有十多处,所以还是能看新的看新的...

2022-06-28 20:46:14 69

原创 14.5--深色主题

我们一直以来使用的操作系统都是以浅色主题为主的,这种主题模式在白天或者是光纤宠族的情况下使用起来没有任何问题,可是在夜晚灯光关闭的情况下使用就会显得非常刺眼。于是,许多应用程序为了能够让用户在光纤昏暗的情况下更加舒适地使用,会在应用内部提供一个一键切换夜间模式的按钮。当用户开启了夜间模式,就会将应用程序的整体颜色都调整成更加适合于夜间浏览的颜色。不过,这种应用程序自发实现夜间模式的方式很难做到全局统一,既有些应用可能支持夜间模式,有些应用却不支持。而且重复操作的问题也很让人头疼,比如说我在一个应用中

2020-07-24 15:00:59 347

原创 14.4--调试Android 程序

当开发过程中遇到一些奇怪的 bug,但又迟迟定位不出来原因是什么的时候,最好的解决办法就是调试了。调试允许我们逐行地执行代码,并可以实时观察内存中的数据,从而能够比较轻易地査出问题的原因。那么本节中我们就来学习一下使用 Android Studio 来调试 Android 程序的技巧。还记得在第 6章的最佳实践环节中编写的那个强制下线程序吗?就让我们通过这个例子来学习ー下 Android 程序的调试方法吧。这个程序中有一个登录功能,比如说现在登录出现了问题,我们就可以通过调试来定位问题的原因。不用.

2020-07-24 13:51:04 225

原创 14.3--定制自己的日志工具

早在1.4 节中我们就已经学过了 Android 日志工具的用法,并且日志工具也确实贯穿了我们整本书的学习。虽然 Android 中自带的日志工具功能非常强大,但也不能说是完全没有缺点,例如在打印日志的控制方面就做得不够好。打个比方,你正在编写ー个比较庞大的项目,期间为了方便调试,在代码的很多地方都打印了大量的日志。最近项目已经基本完成了,但是却有一个非常让人头疼的问题,之前用于调试的那些日志,在项目正式上线之后仍然会照常打印,这样不仅会降低程序的运行效率,还有可能将些机密性的数据泄露出去。那该怎么

2020-07-24 13:36:24 129

原创 14.2--使用Intent 传递对象

Intent 的用法相信你已经比较熟悉了,我们可以借助它来启动活动、发送广播、启动服务等。在进行上述操作的时侯,我们还可以在 Intent 中添加一些附加数据,以达到传值的效果,比如在 FirstActivity 中添加如下代码。val intent = Intent(this,SecondActivity::class.java)intent.putExtra("string_data","hello")intent.putExtra("int_data",100)startActivity(

2020-07-24 03:00:16 243

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除