汇编语言学习-标志寄存器


标志寄存器

思维导图

思维导图

计算机是如何知道到底是按有符号数处理还是按无符号数处理

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

文章作者: 美食家李老叭
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 美食家李老叭 !
评论
  目录