《汇编语言第2版》笔记

检测点10.4

下面的程序运行后,ax中的数值是多少?

内存地址 机器码 汇编指令

1000:0 b8 06 00 mov ax,6

1000:2 ff d0call ax

1000:5 40inc ax

1000:6mov bp, sp

mov ax,[bp]

分析:

call ax载入cpu后,cpu先将ip+3=5,然后执行call ax;

执行call ax时,先push ip(ss:[sp]=5),再将ip设为6,即程序跳到1000:6继续执行;

mov bp,sp将sp的值送入bp

此时bp的值与sp一样,并且bp的默认段寄存器是ss,因此此句此时等同于ss:[sp],指向栈顶,而栈顶此时的值为5

检测点10.5
下面的程序执行后,ax的值是多少?


实验室11

编写一个子程序,将包含任意字符,以0结尾的字符串中的小写字母转变成大写字母。注意需要进行转化的是字符串中的小写字母a-z,而不是其它字符


这里需要注意第27行,为什么小写字母按位与11011111b后就会变成相应的大写字母?

首先,这个只是观察后发现的规律而已,不是我要注解的。我只是想指出进行此步操作时可能出现的误区,下面以a转A为例说明:

误区一:有人查ascii得出a的ascii码的16进制表示为61h,A的是41h。而在转化为二进制时却把这两个16进制数当成了10进制数,因而得出61h=00111101,41h=00101001h

误区二:书中所谓的第5位实际是从右到左的第6位,因为索引是从0开始的

你可能感兴趣的:(汇编语言)