-
python 魔法方法 (6) 描述符,property()函数的原理
整理自小甲鱼鱼C论坛描述符的概念描述符就是将某种特殊类型的类的实例指派给另一个类的属性。而这个特殊类型的类,就是至少要再这个类里面定义__get__()、__set__()或__delete__()三个特殊方法中的任意一个。 魔法方法 含义 __get__(self, instance, owner) 用于访问属性,它返回属性的值 __set__(self, instance, value...…
-
A Pythonic Card Deck
Referenced from Luciano Ramalho, ‘Fluent Python’Example:import collectionsCard = collections.namedtuple('Card', ['rank', 'suit'])class FrenchDeck: ranks = [str(n) for n in range(2, 11) + list('JQKA')] suits = 'spades diamonds clubs heart'.sp...…
-
汇编语言 实验10 (1) 显示字符串
问题编写一个通用的子程序来实现这个功能。我们应该提供灵活的调用接口,使调用者可以决定显示的位置(行,列)、内容和颜色。子程序描述 名称:show_str 功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。 参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围0~79),(cl)=颜色, ds:si指向字符串的首地址。 返回:无 应用举例:在屏幕的8行3列,用绿色显示data段中的字符串。assume cs:codedata segment db 'Wel...…
-
python 魔法方法 (5) 属性访问
整理自小甲鱼鱼C论坛属性访问操作,getattr(),setattr()以及delattr()函数通常可以通过(.)操作符的形式去访问对象的属性。>>> class C: def __init__(self): self.x = 'RED'>>> c = C()>>> c.x'RED'>>> getattr(c, 'x', '没有这个属性')'RED'>>> getattr(c, ...…
-
汇编语言 10.11 10.12 批量数据的传递 寄存器冲突问题
10.11 批量数据的传递子程序中如果只要一个参数,可以放在寄存器bx中。但是如果应对多个数据需要传递,由于寄存器的数量终究有限,我们不能简单地用寄存器存放多个需要传递的数据。对于返回值,也同样有相同的问题。这种情况,我们将批量数据放到内存中,然后将它们所在的内存空间地址放在寄存器中,传递给需要的子程序。对于具有批量数据的返回结果,也可以用同样的方法。问题: 设计一个子程序,功能:将一个全是字母的字符串转化为大写。分析:这个子程序需要知道两件事,字符串的内容和字符串的长度。因为字符串中的字...…
-
汇编语言 10.7-10.10 call和ret的配合使用 mul 模块化 参数和结果传递的问题
10.7 call和ret的配合使用问题(1) 下面程序返回前,bx中的值是多少?assume cs:codecode segmentstart: mov ax, 1 mov cx, 3 call s mov bx, ax mov ax, 4c00h int 21h s: add ax, ax loop s retcode endsend start分析程序运行的过程: CPU将call s 指令的...…
-
C语言 如何利用mac xcode实现C语言反汇编
今天谈一下,如何利用mac系统下的xcode实现类似于windows系统下microsoft visual C++的反汇编功能。(1) 首先安装xcode(2) 按顺序在菜单栏目依次选择:file –> new –> Project…(3) 在新弹出的菜单栏中在最上面选择macos标签页下的Command Line Tool图标,如图所示:(4) 在新弹出的菜单栏中的Language选项栏中选择C,(5) 主界面上左侧菜单栏中会出现两个文件夹分别存放代码以及编译好的程序,(6)...…
-
汇编语言 10.4 10.5 10.6 转移的目的地址在指令,寄存器以及内存中的call指令
10.4 转移的目的地址在指令中的call指令前面讲的call指令,其对应的及其指令中并没有转移的目的地址,而是相对于当前IP的转移位移。“call far ptr 标号”实现的是段间转移。CPU执行此种格式的call指令时,进行如下的操作。 (sp)=(sp)-2 ((ss)*16+(sp))=(CS)(sp)=(sp)-2((ss)*16+(sp))=(IP) (CS)=标号所在段的段地址(IP)=标号在段中的偏移地址 从上面的描述中可以看出,如果我们用汇编语...…
-
python 魔法方法 (4) 简单定制
整理自小甲鱼鱼C论坛简单定制下面来做一个案例,要求如下: 定制一个计时器的类 start和stop方法代表启动定时和停止计时 假设计时器对象t1,print(t1)和直接调用t1均显示结果 当计时器未启动或已经停止计时,调用stop方法会给予温馨的提示 像个计时器对象可以相加:t1+t2 只能使用提供的有限资源完成需要用到下面的资源: 使用time模块的localtime方法获取时间 time.localtime返回struct_time的时间格式 __str__()和_...…
-
汇编语言 10.1 10.2 10.3 ret和retf call指令 依据位移进行转移的call指令
call和ret指令都是转移指令,它们都修改IP,或同时修改CS和IP。它们经常被共同用来实现子程序的设计。10.1 ret和retfret指令用栈中的数据,修改IP的内容,从而实现近转移;retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移。 CPU执行ret指令时,进行下面两步操作: (IP)=((ss)*16+(sp)) (sp)=(sp)+2栈模拟图如下, 1 IP 2 ...…