汇编查表格式怎么写

1.汇编语言编写一简单查表程序0-9循环显示,经验证完全无误 。。谢谢采纳 。
ORG 0000H
MOV DPTR,#TAB ;DPTR此时指向0C0H,以后由于A值的不停加1会不停的往后指,在循环
MAIN:MOV R5,#0 ;给初值
MOV A,R5;A=0
LP: MOVC A,@A+DPTR ;查表
MOV P1,A; 显示
MOV A,R5
INC A ;加1
MOV R5,A
LCALL DELAY ;延时
CJNE A,#10,LP ;是否 到9.
SJMP MAIN
DELAY:MOV R3,#255
DEL1: MOV R4,#255
DEL2: NOP
DJNZ R4,DEL2
DJNZ R3,DEL1
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;共阳字符 。0-9 。
END 如有疑问,可以HI我 。
2.汇编语言怎么查表这样的程序,我做过多次,这个比较简单 。因为“record”是汇编语言关键字,不能用作变量名,所以,用“records”代替了,请理解 。
;本程序通过编译,运行正确
codesegment
assumecs:code,ds:code
;-----------------------------------------
;功能:统计各分数段成绩
;入口:si=成绩首地址,cx=成绩数目,dl=用于除10(除数)
;出口:成绩为60-69分,70-79分,80-89分,90-99分及100分的人数,分别存放到g6,g7,g8,g9和g10单元中 。
staticingprocnear
lodsb;提取成绩
divdl;除10
subal,6;减6,分数段计数地址偏移量
cbw
pushax
popbx
incg6[bx];计数增1
loopstaticing;循环,统计下一个成绩
ret
staticingendp
;-----------------------------------------
recordsdb66,69,84,82,73,88,99,63,100,80,73,84,80,100,90,73,93,60,63,72,88
db88,78,99,100,89,65,61,74,84,79,92,60,61,62,62,66,82,79,71,62,63
db99,98,65,71,82,93,96,81,75,86,97,61,72,83,94,91,89,87,76,65,100
db88,78,99,100,89,65,61,74,84,79,92,60,61,62,62,66,82,79,71,62,63
db66,69,84,82,73,88,99,63,100,80,73,84,80,100,90,79;成绩单
elementsequ($-records)/typerecords;元素个数
g6db0;60-69分计数
g7db0;70-79分计数
g8db0;80-89分计数
g9db0;80-89分计数
g10db0;100分计数
start:pushcs
popds;使数据段与代码段同段
cld
leasi,records;成绩首地址
movcx,elements;成绩数目
movdl,10;用于除10
callstaticing;统计各分数段成绩
exit_proc:movah,4ch;结束程序
int21h
codeends
endstart;编译到此结束
3.用汇编怎么写“利用查表方法把DX的内容(16进制数)转换成ASCIIchangeline macro;定义一个用于换行的宏(无参数) mov dl, 0dH mov ah, 02H;回车 int 21H mov dl, 0aH mov ah, 02H;换行 int 21H endm data segment x dw 0 y dw 0 da1 dw 0 da2 dw 0 string1 db 'Input incorrectly, please input again:', 0dH, 0aH, '$' string2 db 'Please input the first number(enter for ending):', 0dH, 0aH, '$' string3 db 'Please input the seconde number(enter for ending ) :', 0dH, 0aH, '$' string4 db 'Please input the operation you want:(1 for add; 2 for sub; 3 for mul; 4 for div)', 0dH, 0aH, '$' string5 db 'Please input the system you want:(1 for 2,2 for 8,3 for 10,4 for 16 ) ', 0dH, 0aH, '$' string6 db 'The key is:', 0dH, 0aH, '$' data ends input macro num;定义一个用于输入的宏,并判断输入是否正确 local again, mistake, last;local伪指令防止多次调用造成错误 mov cx, 0400H xor bx, bx;bx清零 mov dl, 10 again: mov ah, 01H;接收数据(字符) int 21H cmp al, 0dH;判断是否是回车,遇回车则结束输入 jz last cmp al, '0';和字符0比较大小 jb mistake;小于等于跳转 cmp al, '9';和字符9比较大小 ja mistake xor ah, ah sub al, 30H;与0的ASCII码相减 xchg ax, bx;将ax中的数保存在bx mul dl;al与dl相乘,因为用户输入时是先输高位,再输次高位,所以高位和次高位之间相差10 add bx, ax;bx中的数就是用户刚刚输入的数 dec ch jnz again jmp last mistake: lea dx, string1 mov ah, 09H int 21H mov ch, 4 xor bx, bx jmp again last: mov num, bx ;将用户输入的数放入内存单元num中 endm code segment 'code' assume ds: data, cs: code start: mov ax, data mov ds, ax lea dx, string2 mov ah, 09H int 21H input x changeline lea dx, string3 mov ah, 09H int 21H input y changeline call proc3 call proc1 mov ax, da1 call proc2 mov ah, 4cH int 21H proc1 proc;该子程序用于判断该用何种进制输出 changeline;调用用于换行的宏 lea dx, string5 mov ah, 09H int 21H again1: mov ah, 01H int 21H cmp al, '1' jnz s21 mov da2, 2 jmp last1 s21: cmp al, '2' jnz s31 mov da2, 8 jmp last1 s31: cmp al, '3' jnz s41 mov da2, 10 jmp last1 s41: cmp al, '4' jnz mistake1 mov da2, 16 jmp last1 mistake1: lea dx, string1 mov ah, 09H int 21H jmp again1 last1: changeline lea dx, string6 mov ah, 09H int 21H ret proc1 endp proc2 proc xor dx, dx mov bx, da2 div bx push dx;将余数放到堆栈中保存 cmp ax, 0 jz then call proc2 then:pop dx;将结果从堆栈中取出放入dx中 or dl, 30H cmp dl, 39H jbe next0 add dl, 07H next0: mov ah, 02H;用单字符显示输出 int 21H ret proc2 endp proc3 proc;该子程序用于判断用户将要进行何种运算 lea dx, string4 mov ah, 09H int 21H again: mov ah, 01H int 21H cmp al, '1' jnz s2 mov ax, x;x与y进行相加 add ax, y jmp last s2: cmp al, '2' jnz s3 mov ax, x sub ax, y jmp last s3: cmp al, '3' jnz s4 mov ax, x mov bx, y mul bx jmp last s4: cmp al, '4' jnz mistake mov ax, x xor dx, dx mov bx, y div y jmp last mistake: lea dx, string1 mov ah, 09H int 21H jmp again last: mov da1, ax ret proc3 endp code ends end start 。