|
主题 : : 16.3节的 用AL传送要显示的数据,这个子程序看不懂,有哪位高手能把每行代码解释一下 [待解决] |
回复[ 9次 ]
点击[ 718次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2014-02-13 15:30 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-12-11 10:36 |
16.3节的 用AL传送要显示的数据,这个子程序看不懂,有哪位高手能把每行代码解释一下 | | |
|
|
|
|
[第1楼]
[ 回复时间:2014-02-13 17:42 ]
[引用]
[回复]
[ top ] | |
荣誉值:26
信誉值:0
注册日期:2013-07-15 09:25 |
可能不需要解释每行代码,理清思路、弄懂关键步骤就行。
1、一个字节要用两个16进制数表示,分别是高4位和低4位,如一字节可表示的最大数FF 。
2、将字节的高4位、低4位分成两个独立的16进制数(右移4位和and运算)。注意此时得到的是16进制数。
3、在table中“顺序设置”16进制数的ASCII码(用单引号括起来),这时table中的每个ASCII码值的偏移地址就是该16进制数本身(完成对应关系的构建),即0——>'0'、A——>'A'、F——>'F'等。
4、利用上述对应关系,从table中分别取出高4位、低4位16进制数的ASCII码,并在es中显示。
一句话,用数字自身作地址,去取出数字对应的ASCII码值。 | | |
|
|
|
|
[第2楼]
[ 回复时间:2014-02-13 17:45 ]
[引用]
[回复]
[ top ] | |
荣誉值:26
信誉值:0
注册日期:2013-07-15 09:25 |
可能不需要解释每行代码,理清思路、弄懂关键步骤就行。
1、一个字节要用两个16进制数表示,分别是高4位和低4位,如一字节可表示的最大数FF 。
2、将字节的高4位、低4位分成两个独立的16进制数(右移4位和and运算)。注意此时得到的是16进制数。
3、在table中“顺序设置”16进制数的ASCII码(用单引号括起来),这时table中的每个ASCII码值的偏移地址就是该16进制数本身(完成对应关系的构建),即0 —> '0' 、A —> 'A' 、F —> 'F'等。
4、利用上述对应关系,从table中分别取出高4位、低4位16进制数的ASCII码,并在es中显示。
一句话,用数字自身作地址,去取出数字对应的ASCII码值。 | | |
|
|
|
|
[第3楼]
[ 回复时间:2014-02-14 08:46 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-12-11 10:36 |
谢谢你的解释,不过我还是有好多地方没弄懂,比如AX为什么不用赋值,还有MOV ES:[160*12+40*2],这行代码只能显示1个字节,怎么能显示全部的字符表。 | | |
|
|
|
|
[第4楼]
[ 回复时间:2014-02-14 17:54 ]
[引用]
[回复]
[ top ] | |
荣誉值:26
信誉值:0
注册日期:2013-07-15 09:25 |
一、举例来说,当前主程序传入的入口参数为(AL)=BF(为直观,不写16进制后缀H,下同),
子程序只需对(AL)=BF进行:
1、AH=AL ;分存,使B和F通过后面的操作得以分开存放
2、SHR AH,1 ; 右移,这步重复4次后得到(AH)=0B这个高4位的字节形式
3、AND AL,00001111B ; 使(AL)=0F,低4位的字节形式
至此,BF —> 0B和0F
查看table可知,这两个数正好是table中'B'和'F'的8位偏移地址值,
因此对AH=0B进行如下操作,
4、MOV BL,AH ;转存8位地址,因为BX是寻址寄存器,而AX不是寻址寄存器
5、MOV BH,0 ;置0,这样BX中就得到'B'的16位偏移地址值000B
6、MOV AH,table[BX] ;用这个地址就从table取出了'B',并存于AH中
接下来在ES中显示这个'B'
7、MOV ES:[160*12+40*2],AH ;这样就把ASCII码'B'送到ES中相应位置去显示了;
接着再对AL=0F地进行4~7的类似操作,把'F'紧接着显示在'B'后面,(AL)=BF就全部显示在屏幕上了。
二、对于你新提的问题。
1、(AL)就是主程序传递数据的入口参数,其赋值是在主程序中完成,你现在要编的是子程序,你不必考虑入口参数如AX等的赋值问题。
2、AL只传入了一个字节,分存AH后,通过右移4位和and运算得到两个16进制数,这两个数才是需要在ES中显示的(AL)的字符形式,并不是输入这么一个参数后就显示全部16进制字符表table中的所有字符。你的这个问题不不符合该子程序的任务,再好好理解一下它的任务。 | | |
|
|
|
|
[第5楼]
[ 回复时间:2014-02-17 10:59 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-12-11 10:36 |
衷心的谢谢hky987654321 ,如果没有你的帮助,我真想放弃学汇编了。 | | |
|
|
|
|
[第6楼]
[ 回复时间:2017-09-11 14:50 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2017-09-02 17:09 |
|
|
|
|
|
[第7楼]
[ 回复时间:2017-09-11 15:03 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2017-09-02 17:09 |
回复:[第5楼]
------------------
你的废话可真多 | | |
|
|
|
|
[第8楼]
[ 回复时间:2018-01-03 12:49 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2018-01-03 12:40 |
|
|
|
|
|
[第9楼]
[ 回复时间:2023-11-01 14:58 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2023-09-13 14:04 |
你真刻薄啊,他明明在感谢人家的帮助,你还说人家废话多,希望没有人会帮助你。 | | |