汇编言语程序设计 (汇编言语程序实验报告)
本文目录导航:
汇编言语程序设计
1. 串操作指令、解决器管理指令-位管理指令在某一字符串中搜索能否有字符A,若有,则把搜索次数记载上去,送到BX中;若无,则将BX清0。
设字符串起始地址偏移量为00H,字符串长度为n。
MOV DI,0000H//字符串初始地址放入寄存器DI中MOV CX,n//字符串长度放入CX中MOV AL,A //要查找的字母A放入AL中CLD//肃清方向标记位REPNE SCASB//以上都是指令REPNE SCASB的指令需要。
。
。
可以参考该指令用法,作用是不相等则重复比拟JZ FOUND //有条件跳转转移CX为零则口头标号FOUND处的指令MOV DI,00H//赋值DI为00HFOUND: MOV BX,DI//DI值赋给BX HLT//中止主要是REPNE SCASB指令2.条件转移指令AX中寄存的无符号数,若为偶数,则间接除以2;若为奇数,则加1再除以2。
TEST AX, 0001H //AX中的数与0001H做逻辑与运算但不影响AX的值JZ EVEN //假设结果为0则AX中为偶数跳转到EVENADD AX,1 //AX中的数加1EVEN: SHR AX,1 //AX中的数右移一位相当于除以23. 循环指令若在存储器的数据段中有100个字节导致的数组,需要从该数组中找出“$”字符,而后将“$”字符前面的一切元素相加,结果保管在AL寄存器中。
MOV CX,100 //将100赋值给计数寄存器CXMOV SI,00FFH //初始地址00FFH赋值给SIL1:INC SI //将SI中的值加1CMP BYTE PTR[SI],’$’ //以后地址的一字节数据与$做比拟LOOPNE L1 //不相等继续口头L1SUB SI,0100H //SI中的数据减去100MOV CX,SI //SI 赋值给CXMOV SI,0100H MOV AL,[SI] //以SI中的数据做地址寻址找到数据赋值给ALDEC CX //CX 减去1L2: INC SI //将SI中的数加1ADD AL,[SI] 用SI相对寻址获取的数据与AL中的数据相加LOOP L2 循环口头L2不时到CX为0HLT 最后这个我不是很明确我以为该这样写MOV CX,100 MOV SI,00FFH L1:INC SI CMP BYTE PTR[SI],’$’ LOOPNE L1 SUB SI,00FFH //更改了这。
。
。
00FF应该是起始地址为什么原程序减去的是100呢。
。
不了解MOV CX,SI //以后SI值应该是$所在的地址 减去00FFH就成了$之前的字节数 而后赋值给CXMOV SI,00FFH MOV AL,[SI] DEC CX L2: INC SI ADD AL,[SI] LOOP L2 HLT
批解决的字符串操作指令
@echo off setlocal enabledelayedexpansionset str=abcde :l if !str!== goto end a=!str:~0,1!echo 本次a的值为!a!set str=!str:~1!goto l:end pause 未调试,你看行不行
汇编言语指令STI,MUL,STD有什么作用呀?
在标记寄存器FLAGS中,8086/8088的标记寄存器有9个形态字。
其中的两个DF(方向标记),IF(终止标记)。
DF公用于字符串操作指令,DF=1串操作指令中操作数地址智能递减,说明字符串的解决是从洼地址向低地址方向启动;DF=0使串操作指令中操作数地址智能递增,说明字符串的解决是从低地址向洼地址方向启动。
可经过指令STD置DF=1,CLD置DF=0。
IF终止标记为1时,准许终止,为开终止,即CPU照应可屏蔽的外部终止恳求(INTR);当IF=0时,为关终止,即CPU制止照应可屏蔽的外部终止恳求(INTR),终止准许标记只对可屏蔽的外部终止恳求INTR起作用。
可经过指令STI置IF=1,指令CLI置IF=0。
MUL为无符号乘法。
指令格局为MUL SRC其中,指令的操作数SRC为源操作数,可以是寄存器或存储器,目标操作数为隐含操作数,该指令是单操作数指令。
指令配置:目标操作数(为隐含操作数,该操作数只能是AL或AX或EAX)乘源操作数(SRC),结果送目标操作数AX或DX:AX或EDX:EAX。
口头的操作: 字节乘法:AX《-AL×SRC字乘法:DX:AX《-AX×SRC双字乘法:EDX:EAX《-EAX×SRC