changeline 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
温馨提示:内容为网友见解,仅供参考
用8086汇编语言编写 把16进制数转化为ASCII码
cl dec di pop cx loop again1 ;以下是将array数组中的16进制数转为ASCii码 lea si,array add si,2 mov cx,4again2: cmp byte ptr[si],9 jg next1 add byte ptr[si
汇编程序设计:怎么把字符串转换成ASCII码值?
mov ax,Decimal ; 取十进制无符号数 ASCII_Ctr: xor dx,dx div bx ; 除10,取商数和余数 xchg ax,dx ;交换商数和余数 or al,30h ;转换成ASCII码 stosb ;保存ASCII码 mov ax,dx ;把商数放入ax中 cmp ax,0 ja ASCII_Ctr ;商数大于0,继续取余数 lea dx,ASCII ;字符串...
...将AL寄存器中的一位十六进制数转化成ASCII码 显示输出
;将AL寄存器中的一位十六进制数转化成ASCII码,显示输出。;推荐答案,写的并非是一位。;程序如下:ASSUME CS:CODE CODE SEGMENT START:MOV AL, 0FH ;在这里可写 00H~0FH,这就是一位16进制数 AND AL, 0FH ;无用位清零,保留该数字 ;下面是变成ASCII码 CMP AL, 0AH JB NEXT ADD...
将BX中的16进制数转换为ASCII码,存放到BUF为开始的内存,并显示数值...
起始地址弄错了。这个:END NEXT,是不行的。参照下面的修改,即可:CODE SEGMENT ASSUME CS:CODE,DS:DATA START:---注意这句 MOV AX, DATA MOV DS, AX ………MOV AH, 4CH INT 21H CODE ENDS END START;---注意这句 ...
用汇编如何写十六进制转成十进制
MOV A,#51H;参数放到A MOV B,#100 DIV AB MOV BAI,A ;百位放到 BAI 内存中。MOV A,#10 XCH A,B DIV AB ;A是十位,B是个位。SWAP A ORL A,B; \/\/A的高四位是十位,低四位是个位。构成BCD码的十进制后两位。
跪求汇编语语言命令详解
0CH 写图形点 入口:AH=0C,CX:DX=列号:行号,AL=颜色 ODH 读图形点 入口:AH=0D,CX:DX=列号:行号 返回:AL=颜色 0EH 在当前页、当前光标处写字符 入口:AH=0E,AL=字符的ASCII码,BL=前景色 OFH 显示器状态 入口:AH=0F 返回:AL=当前显示器方式,AH=屏幕列数,BH=当前页号 01H 光标设置 入口:AH...
汇编怎么把字符串的ASCII码值的最大值以16进制输出
输入的字符串本身就是ASCII码,存放的,不需要转换。ASCII的输出可以如下:assume cs:code,ds:data data segment da1 db 100 db ?da2 db 100 dup (?)data ends code segment start:mov ax,data mov ds,ax lea dx,da1 ;输入字符串 mov ah,0ah int 21h mov dl,10 ;换行 mov ah,2...
汇编语言程度题:从键盘上输入字符0~9,要求从屏幕上输出其ASCII值...
MOV DigASCII,AL ;保存这个1位数 AND AL,0FH LEA BX,ASCII_Tab XLAT CBW MOV CX,4 SHL AX,CL SHR AL,CL OR AX,3030h XCHG AH,AL MOV WORD PTR DigASCII[5],AX GetCursor INC DH ;行号增1 INC DH ;行号增1 SetCursor DH,0 LEA DX,DigitalChr ;显示这个数的ASCII码 MOV AH,9 ...
用汇编语言写:从键盘输入一个十进制数(100以内),将其转变为二进制数并...
add dx,ax jmp mL2 mL3: add dx,ax push dx print HEX pop bx push bx MOV CH,4 ;从这里开始将4位二进制数转成16进制ASCII码 mH1: MOV CL,4 ROL BX,CL ;将BX中的数循环左移4位,也就是把BX最高4位,放到BX的最低4位上去。MOV AL,BL ;将低8位放入AL AND AL,0F...
汇编语言编写一简单查表程序
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 DE...