注册 登录
编程论坛 汇编论坛

汇编 顺序结构程序

小木木囡 发布于 2017-05-04 21:22, 2870 次点击
实验内容
查找字母“s”在字符串string中第一次出现的位置,找到后替换为大写的S。假设string字符串为:“a string for testing.”。

注意大小写字母主要是ASCII码的区别,小写s的ASCII码是73h,大写S的ASCII码是53h。将小写转换为大写的算法为小写ASCII码减去20h,即为大写字母。
实验报告要求
写出自己的实验结果、收获与真实的实验体会。画出程序流程图,写出源程序.

data  segment
      string db "A string for testing.";定义一个字符串,该字符串的首地址为string
      strend db ?
data  ends
code  segment
      assume ds:data,cs:code
start:mov ax,data
      mov ds,ax;为数据段赋值
      mov es,ax;使数据段与附加段重叠
      cld ;清方向标志df
      mov di,offset string;将字符串首地址赋给目的变址寄存器di
      mov al,"t";将要查找的字符送累加器dl
      mov cx,strend-string;计算出字符串的长度送计数器cx
      repne scasb;重复执行字符串查找指令
      jz find
      mov bx,0;没找到,使bx=0
      jmp exit
find: dec di;找到了
      mov bx,di;将"t"字符所在地址送bx
exit:mov ah,4ch;返回DOS操作系统
     int 21h
code ends
     end start
2 回复
#2
小木木囡2017-05-04 21:40
求大神啊
#3
Valenciax2017-05-05 22:25
楼主的代码和题目要求有差异,修改几处就是了。

Search_Char equ "s"

data  segment
      string db "A string for testing.";定义一个字符串,该字符串的首地址为string
      str_len equ $ - offset string ;取長度
data  ends
code  segment
      assume ds:data,cs:code
start:mov ax,data
      mov ds,ax;为数据段赋值
      mov es,ax;使数据段与附加段重叠
      cld ;清方向标志df
      mov di,offset string;将字符串首地址赋给目的变址寄存器di
      mov al,Search_Char;将要查找的字符送累加器al
      mov cx,str_len;计算出字符串的长度送计数器cx
      repne scasb;重复执行字符串查找指令
      jnz exit ;找不到
      and byte ptr [di-1],05fh ;找到了,将该字节转成大写
   
exit:mov ah,4ch;返回DOS操作系统
     int 21h
code ends
     end start





1