汇编语言的问题
ASCII码到压缩BCD码的转换MOVA,R2CLRCSUBBA,#30HMOVR3,AJCERRSUBBA,#0AHJCENND;这里有用错吗?我觉得是JNCERR:M...
ASCII码到压缩BCD码的转换
MOV A, R2
CLR C
SUBB A, #30H
MOV R3, A
JC ERR
SUBB A, #0AH
JC ENND ;这里有用错吗?我觉得是JNC
ERR: MOV R3, 0FFH
ENND: $
END
其实我不是要你改错啊,我是看不懂程序,我需要解释啊,大哥! 展开
MOV A, R2
CLR C
SUBB A, #30H
MOV R3, A
JC ERR
SUBB A, #0AH
JC ENND ;这里有用错吗?我觉得是JNC
ERR: MOV R3, 0FFH
ENND: $
END
其实我不是要你改错啊,我是看不懂程序,我需要解释啊,大哥! 展开
2个回答
展开全部
ASCII码到压缩BCD码的转换--不是压缩的BCD码
MOV A, R2
CLR C
SUBB A, #30H
MOV R3, A
JC ERR
SUBB A, #0AH
JC ENND ;这里有用错吗?我觉得是JNC--应该是JC
ERR: MOV R3, 0FFH ----应该是#0FFH
ENND: $
END
------------------------
变换成BCD码,就是变换成0~9。
原始数据,也不能是任意的,也应该是数字,那么就可能是0~F。
但是,大于9的,就不能变换成BCD码了。
SUBB A, #0AH,这里是减去10,不够减的,才是BCD码。
JC ENND JC就是有借位转移,即 “不够减” 转移。
ERR: 够减的,在这里进行错误处理。
MOV A, R2
CLR C
SUBB A, #30H
MOV R3, A
JC ERR
SUBB A, #0AH
JC ENND ;这里有用错吗?我觉得是JNC--应该是JC
ERR: MOV R3, 0FFH ----应该是#0FFH
ENND: $
END
------------------------
变换成BCD码,就是变换成0~9。
原始数据,也不能是任意的,也应该是数字,那么就可能是0~F。
但是,大于9的,就不能变换成BCD码了。
SUBB A, #0AH,这里是减去10,不够减的,才是BCD码。
JC ENND JC就是有借位转移,即 “不够减” 转移。
ERR: 够减的,在这里进行错误处理。
展开全部
Mov cx,10 ;这是设定后面rep指令的计数器
Lea di,namesav ;把namesav的地址设定为后面movsw指令的目的地址DI
Mov si,bx ;设定BX中的数据为movsw指令的源地址SI
Rep movsw ;反复将DS:SI指向的16位数据拷贝到ES:DI指向的地址,每次拷贝SI和DI都会自动递增拷贝的字长,拷贝次数就是cx中的数字。所以现在的实际效果就是从DS:SI指向的地址拷贝了2*10=20个字节到ES:DI指向的地址,也就是把BX指向的数据转移到了namesav。
Mov cx,10 ;跟第一行一样
Mov di,bx ;这次把原先的源地址BX给了目的指针
Rep movsw ;执行了第四行后,现在的SI=BX+20,这条指令就把DS:SI处的20个字节拷贝到原来BX指向的地址处。也就是把BX指向的内存区域的后20个字节给挪到前面了。
Mov cx,10 ;还是10次
Lea si,namesav ;再把前面用来暂存数据的地址设定为源地址SI,而执行了上一个Rep指令,现在DI=BX+20。
Rep movsw ;再把前面暂存的数据,也就是原先BX指向区域的前20个字节再考贝到BX指向的后20个字节处。
综合起来就是把BX地址处的前20字节和后20字节交换,前提条件是DS和ES的值是一样的。
Lea di,namesav ;把namesav的地址设定为后面movsw指令的目的地址DI
Mov si,bx ;设定BX中的数据为movsw指令的源地址SI
Rep movsw ;反复将DS:SI指向的16位数据拷贝到ES:DI指向的地址,每次拷贝SI和DI都会自动递增拷贝的字长,拷贝次数就是cx中的数字。所以现在的实际效果就是从DS:SI指向的地址拷贝了2*10=20个字节到ES:DI指向的地址,也就是把BX指向的数据转移到了namesav。
Mov cx,10 ;跟第一行一样
Mov di,bx ;这次把原先的源地址BX给了目的指针
Rep movsw ;执行了第四行后,现在的SI=BX+20,这条指令就把DS:SI处的20个字节拷贝到原来BX指向的地址处。也就是把BX指向的内存区域的后20个字节给挪到前面了。
Mov cx,10 ;还是10次
Lea si,namesav ;再把前面用来暂存数据的地址设定为源地址SI,而执行了上一个Rep指令,现在DI=BX+20。
Rep movsw ;再把前面暂存的数据,也就是原先BX指向区域的前20个字节再考贝到BX指向的后20个字节处。
综合起来就是把BX地址处的前20字节和后20字节交换,前提条件是DS和ES的值是一样的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询