曲曲的秘密学术基地

纯化欲望、坚持严肃性

欢迎!我是曲泽慧(@zququ),目前在深圳(ICBI,BCBDI,SIAT)任职助理研究员。


病毒学、免疫学及结构生物学背景,可以在 RG 上找到我已发表的论文

本站自2019年7月已访问web counter

汇编语言 7.1 7.2 7.3 7.4 and or, ASCII, 按字符给出数据, 大小写转化

7.1 and和or指令

and 指令

mov al, 01100011B
mov al, 00111011B

;结果为 al = 00100011B

通过该指令可将操作对象的相应位设为0,其他不变。如将al的第六位设置为零的指令为:

and al, 10111111B

or 指令

mov al, 01100011B
or al, 00111011B

;结果为 al = 01111011B

通过该指令可将操作对象的相应位设置为1,其他位不变。如将al的第六位设置为1的指令为:

or al, 09000000B

7.2 关于ASCII码

世界上有很多种编码方案,有一种方案叫做ASCII编码,是在计算机系统中通常被采用的。比如ASCII中,61H表示’a’, 62H表示’b’。

文本便捷过程

我们按下键盘的a键,这个按键的信息被送入计算机,计算机用ASCII码的规则对其进行编码,将其转化为61H存储在内存的指定空间中;文本编辑软件从内存中取出61H,将其送到显卡上的显存中。

7.3 以字符形式给出的数据

我们可以在汇编程序中,用单引号指明数据时以字符的形式给出,编译器将把他们转化为对应的ASCII码。如下代码:

assume cs:code, ds:data
data segment
  db 'unIX'
  db 'foRK'
data ends
code segment
  start: mov al, 'a'
         mov bl, 'b'
         mov ax, 4c00h
         int 21h
code ends
end start

这里mov al, 'a'相当于mov al, 61H,可以使用debug查看。电脑会直接将字符转化为ASCII码。

7.4 大小写转换的问题

大写 十六进制 二进制 小写 十六进制 二进制
A 41 01000001 a 61 01100001
B 42 01000010 b 62 01100010

同理我们发现如果将’a’的ASCII码值减去20H,就会得到’A’。相应的二进制第5位上多了一个 1。

可以通过ASCII码的二进制形式来不需要判断相应字符大小写来直接对其进行改写大小写,代码如下:

assume cs:codesg, ds:datasg

datasg segment
  db 'BaSiC'
  db 'iNfOrMaTiOn'
datasg ends

codesg segment
start:  mov ax, datasg
        mov ds, ax    ;设置ds指向datasg

        mov bx, 0    ;设置ds:[bx]指向‘BaSiC’第一个字母

        mov cx, 5
      s:mov al, [bx]  ;将ASCII码从ds:bx所指向的单元中取出
        and al, 11011111B  ;将ASCII第五位改为0,变为大写字母
        mov [bx], al      ;将转变后的ASCII码写回原单元
        inc bx
        loop s

        mov bx, 5
        
        mov cx, 11
     s0:mov al, [bx]
        or al, 00100000B
        mov [bx], al
        inc bx
        loop s0

        mov ax, 4c00h
        int 21h

codesg ends
end start
Last One

汇编语言 7.5 7.6 通过[bx+idata]进行数组处理

7.5 [bx+idata]例如我们要访问地址[10H], 可以进行如下变换:\[[bx=10H]=[bx=8H+2H]\][bx+idata]表示一个内存单元,它的偏移地址为(bx)+idata (bx中的数值加上idata)。将这种操作代入指令中,如mov ax, [bx+200],含义为:\[(ax)=((ds)*16+(bx)+200)\][bx+idata]的形式有多种方法,如下等同: mov ax, [200+bx] mov ax, 200[bx] mov ax, [bx...…

汇编语言More
Next One

汇编语言 实验5 第二部分

代码1、编写代码段代码,将a段和b段中的数据依次相加,将结果存到c段中。assume cs:codea segment db 1, 2, 3, 4, 5, 6, 7, 8a endsb segment db 1, 2, 3, 4, 5, 6, 7, 8b endsc segment db 0, 0, 0, 0, 0, 0, 0, 0c endscode segmentstart: mov ax, a mov ds, ax mov ax, b ...…

汇编语言More