我的问题是我需要根据以下任务在其他一些任务中对行进行编号。 其他的我都做了,但我不知道怎么做这个。 使用从数字 1 开始的十进制系统中的连续数字对传递到输出的非空行进行编号。要编号的行数永远不会超过 99 行。您始终从行首开始放置两位数字,后跟句点和空格。如果行号在 1-9 范围内,则在数字前放置一个空格。 例子: _1._文本 10._文字
这是我尝试做的部分,但没有成功。 我想过使用堆栈,但我想先征求意见。
...
nums inc cx
; mov bx, tens
; cmp bx, 50
; ja lower
;both mov dx, ones
; mov ah, 9
; int 21h
; inc dx
mov dx, bfrtxt
mov ah, 9
int 21h
; mov dx, ones
; cmp dx, 59
; je reset
fork test cx,1
jz oddw1
jnz evenw1
;lower mov dx, ' '
; mov ah, 9
; int 21h
; jmp both
;
;higher mov dx, tens
; mov ah, 9
; int 21h
; cmp dx, 9
; jmp both
;reset mov dx, 49
; jmp fork
...
segment data
resb 1024
ones db 50
tens db 49
line db 0
bfrtxt db '. ','$'
此代码仅生成从 1 到 23 的行号以适合屏幕。将
max_lines
更改为 99。
行号存储在
line_num
中。代码仅修改偏移量 line_num
和 line_num + 1
处的字节。
如何将文本与行号组合取决于您。 ;)
.model small
.stack 0ffh
.data
line_num db ' ','1','.',' ',13,10,'$'
max_lines db 23
.code
main proc
mov ax,@data
mov ds,ax
xor cx,cx
mov cl,1 ; line counter
mov bx,offset line_num ; stores line number
show_num:
mov ah,09h ; print line number
mov dx,bx
int 21h
inc cl ; next line number
cmp cl,9 ; less or equal 9
jbe le_9
gt_9:
mov ax,cx ; greater than 9
mov dl,10
div dl ; al = quotient, ah = remainder
add al,30h ; add 30h to al and ah
mov [bx],al ; because we want ascii '0'-'9'
inc bx
add ah,30h
mov [bx],ah
dec bx
jmp next_line
le_9:
add cl,30h ; ascii '1' - '9'
inc bx ; line_num + 1
mov [bx],cl
dec bx
sub cl,30h
next_line:
cmp cl, [max_lines]
jbe show_num
exit:
mov ax,4c00h
int 21h
main endp
end main