首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

这4句有用?该如何解决

2012-04-06 
这4句有用?全程序如:.model small.datatable word 2277,2138,1808,1709,1522,1356,1208,1139.code.startup

这4句有用?
全程序如:
.model small
.data
table word 2277,2138,1808,1709,1522,1356,1208,1139
.code
.startup
mov al,0b6h
out 43h,al
mov dl,0
xor dh,dh
mov ax,dx
shl ax,1
mov bx,ax
mov ax,table[bx]
out 42h,al
mov al,ah
out 42h,al
again:in al,61h
or al,03h
out 61h,al

mov cx,3000
outer:push cx
mov cx,0
delay:
loop delay
pop cx
loop outer

next:push ax
in al,61h
and al,0fch
out 61h,al
pop ax
inc dl
cmp dl,8
jne again
.exit 0
end
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov dl,0
xor dh,dh
mov ax,dx
shl ax,1
不明白这几句有什么用?????感觉很多余


[解决办法]
mov dl,0
xor dh,dh
mov ax,dx
shl ax,1
mov bx,ax
就相当于:
xor ax,ax
xor bx,bx
xor dx,dx

[解决办法]
那几句在代码中没有作用啦,可以去掉
[解决办法]
这段程序没构建好.估计这个程序表达出的和要表达出的不一致.
更重要的是会误导没深入的声音编程学习者认为这个程序是大体实现了功能.会致使以后声音编程会出错..(除非有意误导,估计可能性不大!).
所以,就简要跟上两句,作个提醒...
[解决办法]
细说麻烦,就简要说几句:
.model small
.data
table word 2277,2138,1808,1709,1522,1356,1208,1139;这些红色数据,程序中没用上.
.code
.startup

mov al,0b6h ;设置8253(54)控制寄存器,选记数器2,低高读写,脉冲输出3,记数值为2进制
out 43h,al 

mov dl,0
xor dh,dh
mov ax,dx
shl ax,1
mov bx,ax ;这里罗唆,DX,BX,AX归0.AX又不用归0,后面AL,AH都先赋值再用的,SHL AX,1更是迷惑人.

mov ax,table;[bx];取table值进AX,其实正个程序就2277进了AX,其余都没进.

out 42h,al ;设定积数器2的初始值.好设频率
mov al,ah
out 42h,al

again:in al,61h ;设PPI的D0和D1为1,以使小喇叭可以发音.
or al,03h
out 61h,al

mov cx,3000 ;循环.作延时用.
outer:push cx
mov cx,0
delay:
loop delay
pop cx
loop outer

next:;push ax ;这又没作用.

in al,61h ;设PPI的D0和D1为0,不让小喇叭可以发音.
and al,0fch
out 61h,al

;pop ax ;这也没作用

inc dl ;检查是不是发了8次音.
cmp dl,8
jne again

.exit 0 ;回DOS
end


把以上红色部分去掉,程序功能一样.

最主要他也发8次不同音.容易使人以为这8次不同音是根据数据段那8个变量值来该变的,其实不是.而且,这个程序在不同的电脑上,8次音是另外电脑上的8次音是不一样的...不细致会以为这程序功能是完善的.如果不深入,在以后借鉴时会发生错误.
[解决办法]
这个把红色的去掉不就可以了.
略微修改下:
.model small
.code
.startup
mov al,0b6h
out 43h,al

in al,61h
or al,03h
out 61h,al

mov ax,533h
out 42h,al
mov al,ah
out 42h,al

mov cx,5000
outer:
push cx
mov cx,0
delay:
loop delay
pop cx
loop outer

in al,61h
and al,0fch
out 61h,al

.exit 0
end

热点排行