标志寄存器
思维导图
计算机是如何知道到底是按有符号数处理还是按无符号数处理
CPU在执行add等指令的时候,就包含了两种含义:无符号数运算和有符号数运算。对于无符号数运算,CPU用CF位来记录是否产生了进位;对于有符号数运算,CPU用OF位来记录是否产生了溢出,当然,还要用SF位记录结果的符号。CF和OF所表示的进位和溢出,是分别对无符号数和有符号数运算而言的,他们之间没有任何关系。
也就是说,本身就是有两层含义都在,但具体看作哪一种,取决于写程序的你怎么处理这些变换的标志位。如何利用这些标志位和运算结果来正确的表达你想要的计算方式。
实验11
编写一个子程序,将包含任意字符,以0结尾的字符串中的小写字母转变成大写字母,描述如下。
名称:letterc
功能:将以0为结尾的字符串中的小写字母转变成大写字母
参数:ds:si指向字符串首地址
思路
- 判断所取到的字节数据是不是0,是的话结束,不是的话,继续判断
- 判断取到的字节数据是不是小写字母。是的话,转变成大写字母;不是的话,就不变
代码
assume cs:codesg
datasg segment
db "Beginner's All-purpose Symbolic Instruction Code.",0
datasg ends
codesg segment
begin:
mov ax,datasg
mov ds,ax
mov si,0
call letterc
mov ax,4c00h
int 21h
letterc:
mov ch,00
mov cl,ds:[si]
jcxz ok
cmp cx,97
jb next
cmp cx,122
ja next
sub cx,32
mov ds:[si],cl
next:
inc si
jmp letterc
ok:
ret
codesg ends
end begin