寄存器冲突的问题(1005)

本文为《汇编语言程序设计》1005小节例程。点击链接…进课程主页。

问题:编程将data段中的字符串转化为大写。

assume cs:code
data segment
             db 'conversation'
data ends
code segment
start:   mov ax,data
         mov ds,ax
         mov si,0
         mov cx,12
         call capital
         mov ax,4c00h
         int 21h
capital: and byte ptr [si],11011111b
         inc si
         loop capital
         ret
code ends
end start

用0作为字符串的结束

assume cs:code
data segment
         db 'conversation',0
         data ends
code segment
start:    mov ax,data
          mov ds,ax
          mov si,0
          call capital
          mov ax,4c00h
          int 21h
capital:  mov cl, [si]
          mov ch, 0
          jcxz ok
          and byte ptr [si], 11011111b
          inc si
      ok: ret
code ends
end start

将以下字符串转为大写

assume cs:code
data segment
         db 'word',0
         db 'unix',0
         db 'wind',0
         db 'good',0
data ends

code segment
start:  mov ax,data
          mov ds,ax
          mov bx,0
          mov cx,4
       s: mov si,bx
          call capital
          add bx,5
          loop s
          mov ax,4c00h
          int 21h
capital: mov cl,[si]
           mov ch,0
           jcxz ok
           and byte ptr [si],11011111b
           inc si
           jmp short capital
     ok: ret
code ends
end start
;程序中cx既用于循环,又用于读取数据——冲突!

解决了寄存器冲突的程序

;正确的程序
assume cs:code
data segment
         db 'word',0
         db 'unix',0
         db 'wind',0
         db 'good',0
data ends

code segment
   start: mov ax,data
          mov ds,ax
          mov bx,0
          mov cx,4
       s: mov si,bx
          call capital
          add bx,5
          loop s
          mov ax,4c00h
          int 21h
 capital: push cx
          push si
  change: mov cl,[si]
          mov ch,0
          jcxz ok
          and byte ptr [si],11011111b
          inc si
          jmp short change
      ok: pop si
          pop cx
          ret
code ends
end start
时间: 2024-09-20 08:03:52

寄存器冲突的问题(1005)的相关文章

汇编语言课程主页

[写在开课前] 这学期,接了一门新课--汇编语言程序设计. 这是门好课.学好了,能干的工作,那是高大上:职业中不指望自己的工具袋中备一把名叫"汇编"的榔头的同学,借着汇编语言,也可以练计算机专业学习的内功. 新培养方案中恢复了这门课,我就想将捣鼓捣鼓这门课程.搞了好多年"计算"的事,早对自己离"计算机"有点远而不满.备课中,再回计算机的底层,重新体会"螺丝壳里做道场"的精致. 教学模式继续翻转课堂,随着授课进度,同步建设资源.

汇编语言中‘子程序’的设计方法

汇编语言是各种计算机语言中与硬件关系最为密切.最直接的语言,是时空效率最高的语言,它能够利用计算机所有硬件特性并能直接控制硬件,所以在计算机应用系统设计和过程控制中是必不可少的.目前教学中采用8086/8088汇编语言系统组织教学仍是最佳选择.其中子程序技术是一种解决重复性问题的重要设计方法,采用子程序结构可以简化源程序书写.提高程序存储效率.减少出错率.增加程序的易读性和可维护性,并且有利用子程序资源的组织和使用.设计子程序时,除了必需要考虑的程序调用.返回和完成特定功能的指令序列外,还必须注

使用libhybris,glibc和bionic共存时的TLS冲突的问题

如无特殊说明,系统为linux,架构为x86 32bit,使用glibc,通过libhybris调用android bionic的驱动.android版本5.1.0_r1.   一.什么是TLS TLS的全称是Thread Local Storage,是指进程中每一个线程都独有的变量,名字相同,但是读写互不影响.最常见的TLS之一就是errno,每一个线程都有自己的errno,保存着该线程的最近一次函数调用错误原因,别的线程干啥都不会影响到这个线程的errno,防止别的线程覆盖该线程的errno

自动、静态、 寄存器、易失变量的区别 .

(一)自动变量    什么是自动变量呢?自动变量就是指在函数内部定义使用的变量.他只是允许在定义他的函数内部使用它.在函数外的其他任何地方都不能使用的变量.自动变量是局部变量,即它的区域性是在定义他的函数内部有效.当然这说明自动变量也没有链接性,因为它也不允许其他的文件访问他.由于自动变量在定义他的函数的外面的任何地方都是不可见的,所以允许我们在这个函数外的其他地方或者是其他的函数内部定义同名的变量,他们之间不会发生冲突的.因为他们都有自己的区域性,而且它没有链接性(即:不允许其他的文件访问他的

[数据结构] Hash表、Hash函数及冲突解决

1.Hash表 哈希表(Hash table,也叫散列表),是根据key而直接进行访问的数据结构.也就是说,它通过把key映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列函数,存放记录的数组叫做散列表. 以数据中每个元素的关键字K为自变量,通过散列函数H(k)计算出函数值,以该函数值作为一块连续存储空间的的单元地址,将该元素存储到函数值对应的单元中. 哈希表存储的是键值对,其查找的时间复杂度与元素数量多少无关,哈希表在查找元素时是通过计算哈希码值来定位元素的位置从而直接访问元

寄存器位运算的与或问题

问题描述 寄存器位运算的与或问题 #define GPIO_BASE (0x7F008000)#define rGPACON (*(volatile unsigned *)(GPIO_BASE+0x00))rGPACON = (rGPACON & ~(0xff<<0)) | (0x22<<0); 对這个有点小蒙:1.~(0xff<<0) = ?2.GPIO_BASE+0x00 0x7F008000 + 0x00是32位的:0111 1110 0000 0000

c++-MFC Tab控件下的page与page的控件冲突

问题描述 MFC Tab控件下的page与page的控件冲突 我在MFC下做了4个对话框,其中一个是主对话框,内有一个Tab控件,然后剩下的三个对话框作为子对话框,也就是tab控件的三个page. 我在第一个page(子对话框)中添加了一些控件,如listctrl控件,同时关联了变量. 程序运行没有问题. 接着我在其他两个page(子对话框)中添加了相同的控件,同时关联了变量,接下来就是令我不解的地方,程序崩溃了.我什么都没做,只是关联了一下控件变量,不知道为什么程序会崩溃. 在线等,求大神指导

设计-windowTranslucentStatus与adjustResize冲突问题

问题描述 windowTranslucentStatus与adjustResize冲突问题 当我一个应用设置adjustResize后EditText弹不起来,设置fitsSystemWindows="true"后会多出来白边(没有用Toolbar) 解决方案 ScrollView与ListView的冲突问题

如何解决局域网内IP地址冲突故障

在Windows操作系统环境下,普通工作站用户常常可以根据自己的意愿随意修改本地工作站的IP地址参数,那样一来局域网网络就容易频繁发生IP地址冲突的故障现象,这种现象会"干扰"局域网的稳定运行,甚至会给日常的办公效率带来严重的影响.那么作为网络管理员来说,我们究竟该采取什么措施,不让IP地址冲突"干扰"局域网网络的正常.高效运行呢?现在本文就为各位朋友提出一些有效的应对办法,以帮助各位巧妙地管理好自己单位的局域网,确保局域网网络的运行效率不会受到IP地址冲突现象的&